in reply to flag function

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");

$flag = "ON" ... $flag = "OFF"
should be
my $looking = 1; ... $looking = 0;

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/)

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; } }

Replies are listed 'Best First'.
Re^2: flag function
by mr_mischief (Monsignor) on Jul 11, 2018 at 22:15 UTC

    ++ for a clear and thorough explanation but for completeness your last code block omits the declaration and initialization of $looking.

      That wasn't quite the problem, but it's been fixed. Thanks.