直接看操作過程吧
- [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 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
- 2
last改爲next:
- [root@Centos5 perl]# perl test.pl |head -5
- 0
- 1
- 2
- 3
- 4
可見next沒有生效,否則將會是一個死循環,打印0 1 2 2 2 ......無數個2.