perl命令行-p參數

直接看操作過程吧
  1. [root@Centos5 perl]# cat passwd  
  2. 1 root:x:0:0:root:/root:/bin/bash 
  3. 2 bin:x:1:1:bin:/bin:/sbin/nologin 
  4. 3 daemon:x:2:2:daemon:/sbin:/bin/bash 
  5. 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 
  6. 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
  7. 6 sync:x:5:0:sync:/sbin:/bin/sync 
  8. 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
  9. 8 halt:x:7:0:halt:/sbin:/sbin/halt 
  10. 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 
  11. 10 news:x:9:13:news:/etc/news: 

passwd文件有10行內容。如果遇到第6行則next到第7行,也就是不打印第6行內容。

  1. [root@Centos5 perl]# perl -pe 'next if /^6/' passwd  
  2. 1 root:x:0:0:root:/root:/bin/bash 
  3. 2 bin:x:1:1:bin:/bin:/sbin/nologin 
  4. 3 daemon:x:2:2:daemon:/sbin:/bin/bash 
  5. 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 
  6. 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
  7. 6 sync:x:5:0:sync:/sbin:/bin/sync 
  8. 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
  9. 8 halt:x:7:0:halt:/sbin:/sbin/halt 
  10. 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 
  11. 10 news:x:9:13:news:/etc/news: 
奇怪了沒有跳過啊,我的命令也沒錯。試試last呢?
  1. [root@Centos5 perl]# perl -pe 'last if /^6/' passwd      
  2. 1 root:x:0:0:root:/root:/bin/bash 
  3. 2 bin:x:1:1:bin:/bin:/sbin/nologin 
  4. 3 daemon:x:2:2:daemon:/sbin:/bin/bash 
  5. 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 
  6. 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是沒有效果的。
  1. [root@Centos5 perl]# cat test.pl  
  2. #!/usr/bin/perl -w 
  3. use strict; 
  4. my $i = 0
  5.  
  6. while ($i <= 5) { 
  7.         print "$i\n"; 
  8.         if ($i == 2) { 
  9.                 last; 
  10.         } 
  11. } continue { 
  12.     $i++; 
先看last:結果如下沒有問題。
  1. [root@Centos5 perl]# perl test.pl  
last改爲next:
  1. [root@Centos5 perl]# perl test.pl |head -5 
可見next沒有生效,否則將會是一個死循環,打印0 1 2 2 2 ......無數個2.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章