[root@Centos5 perl]# cat passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/bin/bash 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 news:x:9:13:news:/etc/news:
passwd文件有10行内容。如果遇到第6行则next到第7行,也就是不打印第6行内容。
[root@Centos5 perl]# perl -pe 'next if /^6/' passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/bin/bash 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 news:x:9:13:news:/etc/news:奇怪了没有跳过啊,我的命令也没错。试试last呢?
[root@Centos5 perl]# perl -pe 'last if /^6/' passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/bin/bash 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin这次正常执行了。这是为什么呢?看下perl -h -n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also,like sed 看不出啥特殊含义来。 其实-p的真正含义是这样的? -p等于执行了 while (<>) {
yourcode;
}continue{
print;
} 这个语句对于next是不起作用的,也就是即使有next也会执行continue语句,但是对于last和redo是没有效果的。
[root@Centos5 perl]# cat test.pl #!/usr/bin/perl -w use strict; my $i = 0; while ($i <= 5) { print "$i\n"; if ($i == 2) { last; } } continue { $i++; }先看last:结果如下没有问题。
[root@Centos5 perl]# perl test.pl 0 1 2last改为next:
[root@Centos5 perl]# perl test.pl |head -5 0 1 2 3 4可见next没有生效,否则将会是一个死循环,打印0 1 2 2 2 ......无数个2. 总结
以上是内存溢出为你收集整理的perl命令行-p参数全部内容,希望文章能够帮你解决perl命令行-p参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)