请看下$_和$tmp有什么区别??

请看下$_和$tmp有什么区别??

section1和section2有什么区别??
为什么section1可以,section2不行?报错??
#!/usr/bin/perl -w

my $start = qr/^=head1/;
my $end = qr/^=cut/;
=head
#section1

while(<DATA>){
    if ($_ =~ /$start/ .. /$end/){
        print "*** $_";
    }
    else{
        print "--- $_";
    }
}
=cut

#section2

my @arr = <DATA>;
foreach my $tmp (@arr)
{
    if ($tmp =~ /$start/ .. /$end/)
    {
        print "*** $_";
    }
    else
    {
        print "--- $_";
    }
}

__END__
#!/usr/bin/perl -w

a:afda
b:fda
#c:adfaf

=head1 d:sta
e:adfaf fda
f:13
g:132   #!/perl

=cut
h:fda
j:123    #这里是注释

#!/usr/bin/

k:545


兄弟,你该学 Perl 了。
老大,我是刚看你的列子http://bbs.chinaunix.net/thread-1165378-1-4.html
照着上面学的。
现在是我要删除perl里的注释,单行注释已经可以删除了,就是多行有问题。
嘿嘿,小弟不才,就是才学perl啊。
看了老大的例子,就对照自己的改了下,可一直报警告啊,结果也有问题。
麻烦老大不吝赐教。
另外,两个都是循环读数组啊,
只是section1用的$_进行匹配,而section2用了一个临时变量$tmp匹配啊、
按理说两个是一个意思啊。
可为什么实际却有差别??
有差别的
第一个是一行一行读
第二个是一起读进一个数组的
需要注意这个特殊的变量

[Copy to clipboard] [ - ]
CODE:
$.

range操作符(..或者...)在标量环境中很有意思,

[Copy to clipboard] [ - ]
CODE:
/$sart/ .. /$end/

默认是和$.进行比较的
楼上的你也该去读书了。
当遇到整数的时候才与$. 对应,并非scalar。  


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

my $start = qr/^=head1/;
my $end = qr/^=cut/;
=head
#section1

while(<DATA>){
    if ($_ =~ /$start/ .. /$end/){
        print "*** $_";
    }
    else{
        print "--- $_";
    }
}
=cut

#section2

my @arr = <DATA>;
foreach my $tmp (@arr)
{
    if ($tmp =~ /$start/ .. $tmp =~ /$end/)
    {
        print "*** $tmp";
    }
    else
    {
        print "--- $tmp";
    }
}

__END__
#!/usr/bin/perl -w

a:afda
b:fda
#c:adfaf

=head1 d:sta
e:adfaf fda
f:13
g:132   #!/perl

=cut
h:fda
j:123    #这里是注释

#!/usr/bin/

k:545

Perl Cookbook, 2nd Edition
Recipe 6.8 Extracting a Range of Lines
read the perl documentation in perldoc perlop

modify the section 1 with
if ($_ =~ /$start/ .. $_ =~ /$end/)

and section 2 with
if ($tmp =~ /$start/ .. $tmp =~ /$end/)