例子:
復制代碼 代碼如下:
#!/bin/perl
print "Please input an string and a number by order!\n";
$the_string=>;
$the_numb=>;
print "The result is \n";
print "$the_string"x"$the_numb";
結(jié)果:
The result is
my
my
my
my
my
這里的問題便是沒有使用chomp引起的。
來看加入chomp的情況:
復制代碼 代碼如下:
#!/bin/perl
print "Please input an string and a number by order!\n";
chomp($the_string=>);
chomp($the_numb=>);
print "The result is \n";
print "$the_string"x"$the_numb";
結(jié)果:
The result is
mymymymymy
如果字符串結(jié)尾有換行符,chomp 可以去掉它。這基本上就是它能完成的所有功能,如下例:
$text = “a line of text/n”; #也可以由STDIN>輸入
chomp($text); #去掉換行符(/n)。
它非常有用,基本上你的每一個程序都會用到它。如你將知道,這是將字符串末尾換行符去掉的最好方法。基于Perl 中的一條基本原則:在需要使用變量的地方,可以使用賦值表達式來代替。我們有更簡單的使用chomp 的方法。Perl 首先做賦值運算,再使用這個變量。因此使用chomp 的最常用方法是:
chomp ($text = STDIN>); #讀入,但不含換行符
$text = STDIN>;
chomp ($text); #同上,但用兩步完成
第一眼見到時,第一種組合的方法看起來復雜些。如果把上述其看成兩步操作,讀一行再chomp,那寫成兩個語句的方法
看起來自然些。如果將其看作一個操作,讀入一行但不包括換行符,那寫成一個語句的方法更恰當。由于絕大多數(shù)Perl 程序員使用第一種寫法,你也應該使用它。
chomp 是一個函數(shù)。作為一個函數(shù),它有一個返回值,為移除的字符的個數(shù)。這個數(shù)字基本上沒什么用:
$food = STDIN>;
$betty = chomp $food; #得到值1
如上,在使用chomp 時,可以使用或不使用括號()。這又是Perl 中的一條通用規(guī)則:除非移除它們時含義會變,否則括號是可以省略的。
如果結(jié)尾有兩個或兩個以上的換行符,chomp 僅去掉一個。如果沒有,那什么也不做,返回0。
chop和chomp函數(shù)區(qū)別
chop函數(shù)負責刪除標量型標量的最后一個字符或數(shù)組中每個元素的最后一個字符,并返回修改后的值。chop一般用于刪除程序接收到的輸入行末尾的換行符,這些輸入行可以來自STDIN、文件或者命令置換結(jié)果。
chomp函數(shù),負責刪除標量型變量中的最后一個字符,或者數(shù)組中每個字的最后一個字符,并保證只有該行末字符是換行符時才進行刪除操作。它會返回刪除后的字符數(shù)目。使用chomp函數(shù)來代替chop,能避免刪除換行符之外的其它字符。
例1:chop
#!/usr/bin/perl
$v = 'Flowers';
$r = chop($v);
print "$v (without $r)\n";
運行結(jié)果
[root@localhost per]# ./1-16.pl
Flower (without s)
例2:chomp
#!/usr/bin/perl
print "User name: ";
$name = STDIN >;
chomp $name;
print "Your user name is : $name\n";
運行結(jié)果
[root@localhost per]# ./1-18.pl
User name: Bill
Your user name is : Bill