perl while loop iterates through a variable. -



perl while loop iterates through a variable. -

this little snippet first chapter of lwp perl oreilly book. line

$count++ while $catalog =~ m/perl/gi;

perplexes me

i not understand how while statement iterates through lines in $catalog variable find matched, don't know how explain line in english language much less perl

#!/usr/bin/perl -w utilize strict ; utilize lwp::simple ; $catalog = get("http://www.oreilly.com/catalog"); $count = 0; $count++ while $catalog =~ m/perl/gi; print "$count\n";

so have tried writing out long hand no avail.

#!/usr/bin/perl -w utilize strict ; utilize lwp::simple ; $catalog = get("http://www.oreilly.com/catalog"); open( $fh_catalog ,"<" , $catalog) || die "cant open $!"; while (<$fh_catalog>) { print $_ ; sleep 1; }

i tried

#!/usr/bin/perl -w utilize strict ; utilize lwp::simple ; $catalog = get("http://www.oreilly.com/catalog"); while (<$catalog>) { print $_ ; sleep 1; }

$catalog contains string <!doctype html pub[...][newline][newline]<html>[...].

your first snippet fails because $catalog doesn't contain file name.

your sec snippet fails because $catalog doesn't contain file handle.

when match operator /g modifier used scalar context, searches lastly search left off.

the analog be

use time::hires qw( sleep ); # back upwards sleeping fractions of seconds. $| = 1; # turn off stdout's output buffering. $i (0..length($content)-1) { print(substr($content, $i, 1)); sleep 0.1; }

let's utilize simpler string example.

my $s = "a000a000a000"; ++$count while $s =~ /a/g;

here's happens:

the match operator executed. finds first a, sets pos($s) = 1;, , returns true. the loop body entered, , $count incremented. the match operator executed. behaves if string started pos($s) (1), finds sec a, sets pos($s) = 5;, , returns true. the loop body entered, , $count incremented. the match operator executed. behaves if string started pos($s) (5), finds 3rd a, sets pos($s) = 9;, , returns true. the loop body entered, , $count incremented. the match operator executed. behaves if string started pos($s) (9), fails find match, clears pos($s), , returns false. loops exits.

nothing changes if of characters of string newlines.

perl

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -