Rajeev
Rajeev

Reputation: 193

Perl command line - assume while loop around

Can anyone explain the difference in output of the two perl (using cygwin) commands below:

$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'

prints :

1

$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'

The first prints '1' while second one outputs blank?

Thanks

Upvotes: 0

Views: 644

Answers (1)

mpapec
mpapec

Reputation: 50637

-n switch adds while loop around your code, so in your case $_ is populated from standard input. In second example there is no while loop thus $_ is leaved undefined.

Using Deparse you can ask perl to show how your code is parsed,

perl -MO=Deparse -n -e 'if ($_ =~ /a/) {print 1;}'

LINE: while (defined($_ = <ARGV>)) {
    if ($_ =~ /a/) {
        print 1;
    }
}

perl -MO=Deparse -e 'if ($_ =~ /a/) {print 1;}'

if ($_ =~ /a/) {
    print 1;
}

Upvotes: 1

Related Questions