2010年8月19日 星期四

[Perl 教學] 取得使用者的輸入 (chomp 運算符介紹)


前言 :
該如何讓 Perl 程式讀取從鍵盤所輸入的值? 最簡單的方式就是運用整列輸入運算符 .

運算符介紹 :
程式碼能出現純量值的地方, 只要放上 , Perl 就能從 "標準輸入" 讀進一列文字 (讀取到換列符號出現為止). 但 所回傳的字串值通常會跟個一個換列字符. 可以參考範例代碼如下 :
- CH02_P35.pl 代碼 :
  1. #!/usr/bin/perl  
  2. $line = ;  
  3. if($line eq "\n") {  
  4.         print "Only empty line!\n";  
  5. else {  
  6.         print "Input: " . $line . "\n";  
  7. }  

執行結果 :
linux-tl0r:~/perlPrac/learningPerl # perl CH02_P35.pl <執行程式>
Hi John! <輸入字串, 以Enter結束輸入>
Input: Hi John
<多的換行> 
!
但實際上, 很少會需要保留最後面的換行字符, 這時後 chomp 函式就可以派上用場了.

chomp 函式介紹 :
乍看之下 chomp 函式的用途非常有限. 它就只能用在字串的變數中. 如果此字串結尾是換列字符, chomp 就會將它移除. 這就是它的所有功能!! 範例如下 :
$text = "文字\n"; # 假裝是從 讀進來
chomp($text); # 去除換列字符

其實 chomp 非常好用, 你所寫的每個程式幾乎都少不了它. 如剛剛所說, 處理變數中的字串時, 它是用來去除結尾處的換列字符最佳方式. 事實上 Perl 程式有變數的地方都可以用賦值運算符來代替, 而 chomp 還有更簡潔的寫法, 在底下例子 Perl 會先對變數進行賦值運算再使用該變數丟入 chomp 中 :
chomp($text = ); # 讀入文字, 並忽略結尾換列字符

最後要注意的是如果字串後面有兩個換列字符, 使用 chomp 只會去除一個(最後一個). 而如果 chomp 有去除換列字符則會回傳 1 否則回傳 0.

補充說明 :
Tutorialspoint - PERL Special Variables :
Global Special Filehandles
ARGV
The special filehandle that iterates over command line filenames in @ARGV. Usually written as the null filehandle in <>.

STDERR
The special filehandle for standard error in any package.

STDIN
The special filehandle for standard input in any package.

STDOUT
The special filehandle for standard output in any package.

DATA
The special filehandle that refers to anything following the __END__ token in the file containing the script. Or, the special filehandle for anything
following the __DATA__ token in a required file, as long as you're reading data in the same package __DATA__ was found in.

_ (underscore)
The special filehandle used to cache the information from the last stat, lstat, or file test operator.
This message was edited 4 times. Last update was at 19/08/2010 16:01:42

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...