Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

The part you're asking about is actually fine. On the other hand, just about everything else looks wrong to me. Let's go over the code.


Always use use strict; use warnings qw( all );!!!


open TEST,"@ARGV[0]";

should be

open(my $TEST, "<", $ARGV[0]) or die("Can't open \"$ARGV[0]\": $!\n");
  • Use the safer three-arg open over the two-arg open.
  • Always check open for errors as it is particularly prone to failure.
  • Don't use global variables for nothing.
  • Don't put variables in quotes for nothing.
  • @ARGV[0] is an array slice, but you want to lookup a single value in the array.

$flag = "ON" ... $flag = "OFF"
should be
my $looking = 1; ... $looking = 0;
  • Your code didn't even compile.
  • Limit the scope of variables to where they are needed.
  • Use true and false values (such as 1 and 0) for booleans instead of two true values (such as "ON" and "OFF").
  • Use meaningful variable names.

while (<TEST>)

should be

while (<>)

<> is short for <ARGV>. ARGV is a specical file handle that reads from the files named in the argument list or STDIN if none.


if (/test/ and $flag eq "ON")

should be

if ($looking && /test/)
  • It's better to only use the low precedence and, or and not for flow control (... or return ..., ... or die ..., ... or next ..., etc).
  • When you want to test for truthness, don't check for a specific value.
  • $looking is far cheaper than /test/, so we'll move it first.

print "start";
should be
print "start\n";
or
say "start";

close TEST;
is useless if you don't check if it succeeded.
So we now have
use strict; use warnings qw( all ); my $looking = 1; while (<>) { if ($looking && /test/) { print "start\n"; $looking = 0; } }

The one problem left is that you read "half" the file for nothing. Let's avoid that!

use strict; use warnings qw( all ); while (<>) { if (/test/) { print "start\n"; last; } }

In reply to Re: flag function by ikegami
in thread flag function by dideod.yang

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2024-04-23 16:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found