I'm trying to use a break statement in a for loop, but since I'm also using strict subs in my Perl code, I'm getting an error saying:
Bareword "break" not allowed while "strict subs" in use at ./final.pl line 154.
Is there a workaround for this (besides disabling strict subs)?
My code is formatted as follows:
for my $entry (@array){ if ($string eq "text"){ break; }
} 1 5 Answers
Oh, I found it. You use last instead of break
for my $entry (@array){ if ($string eq "text"){ last; }
} 4 Additional data (in case you have more questions):
FOO: { for my $i ( @listone ){ for my $j ( @listtwo ){ if ( cond( $i,$j ) ){ last FOO; # ---> # | } # | } # | } # | } # <------------------------------- 2 Simply last would work here:
for my $entry (@array){ if ($string eq "text"){ last; }
}If you have nested loops, then last will exit from the innermost loop. Use labels in this case:
LBL_SCORE: { for my $entry1 (@array1) { for my $entry2 (@array2) { if ($entry1 eq $entry2) { # Or any condition last LBL_SCORE; } } } }Given a last statement will make the compiler to come out from both the loops. The same can be done in any number of loops, and labels can be fixed anywhere.
On a large iteration I like using interrupts. Just press Ctrl + C to quit:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) { # Do your stuff
} 2 For Perl one-liners with implicit loops (using -n or -p command line options), use last or last LINE to break out of the loop that iterates over input records. For example, these simple examples all print the first 2 lines of the input:
echo 1 2 3 4 | xargs -n1 | perl -ne 'last if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -ne 'last LINE if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last if $. == 3;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last LINE if $. == 3;'All print:
1
2The perl one-liners use these command line flags:-e : tells Perl to look for code in-line, instead of in a file.-n : loop over the input one line at a time, assigning it to $_ by default.-p : same as -n, also add print after each loop iteration over the input.
SEE ALSO:
last docslast, next, redo, continue - an illustrated example
perlrun: command line switches docs
More examples of last in Perl one-liners:
Break one liner command line script after first match
Print the first N lines of a huge file