Why use the -p|-n in slurp mode in perl one liner? -


in perl 1 liner slurp mode 0777 hope equal below script

open $fh, "<","file"; local $/; $s = <$fh>; #now whole file stored $s 

here not using loop storing elements together(single data).

but in perl 1 liner, why use -p|-n switch enable slurp mode (-0777)? performance gain here.?

-p | -n using looping purpose. actual performance of 1 liner below script or else?

open $fh, "<","file"; $s; while (<$fh>) {     $s.=$_; } print $s; 

without -n or -p there no implicit while (<>) loop default $_ not set, , stdin isn't read either. if want have <> , $_ default in slurp mode need 1 of these switches along -0777, on own merely (un)sets $/. this

echo "hello" | perl -0777 -e 'print' 

prints nothing, , -w warns of use of uninitialized value $_. this

echo "hello" | perl -0777 -e '$v = <>; print $v' 

does print hello. stdin can read variable, 'slurp' is on.

in terms of equivalent to, mere -0777 $/ = undef. if add read

# use warnings; local $/; <>;  print; 

the <> read in 1 go there no default input , pattern-searching space $_ read not assigned anything. warnings on hear it. (thanks jonathan leffler mentioning stdin in comment.) code equivalent using -n is

while (defined($_ = <argv>)) { } 

so standard input , $_ set up. run perl -mo=deparse -n -e 1 see these.

in perlvar conditions listed when "... perl assume $_ ...". last bullet

the default place put next value or input record when , readline, readdir or each operation's result tested sole criterion of while test. outside while test, not happen.

with -n or -p switches this, , of standard input.

note, example not equivalent since does assign.


comment on specific statements in question.

the slurp not "enabled" these switches -- set -0777 flag. use them because automatic standard input , $_ them.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo