2011-03-08 102 views
2
chomp($myString); 
$myString =~ s/\///g; 

我可以代替这两个与如何替换perl的空白

$myString =~ s/\s//g; 

有什么区别?请解释。

+3

不,你不能 - 他们没有做任何远程类似。你想做什么? – 2011-03-08 05:49:50

+0

chomp()only * defaults *去除换行符。 chomp()删除的内容取决于$ /变量的值。 – tadmc 2011-03-08 13:31:04

回答

9

如果第一个代码存在,那么您的第一个代码将在$ myString结尾处换行,然后删除所有“/”字符。第二行代码将删除所有空白字符。有错字吗?

也许你想知道你可以取代这个:

chomp($myString); 
$myString =~ s/\s//g; 

与此:

$myString =~ s/\s//g; 

如果是这样的问题,那么是的。由于换行符被视为空白,第二个代码示例执行上面两行的作业。

+0

啊哈,所以我可以写 $ myString =〜s/\ s // g; $ myString =〜s/\ /// g; 而不是写所有三个 chomp($ myString); $ myString =〜s/\ /// g; $ myString =〜s/\ s // g; 我是否正确 – DarRay 2011-03-08 06:08:55

+0

@DarRay:是的,除非您更改了默认输入记录分隔符。 – ysth 2011-03-08 07:18:00

0

Chomp将在您的字符串末尾摆脱换行符,但不会删除空格。典型的装饰功能使用以下两个置换系:

$string =~ s/^\s+//; 
$string =~ s/\s+$//; 

第一行你字符串的开始处删除任何空间,并且该字符串的结束之后的第二去除空格。

1

从的perldoc chomp

格格从输入记录的结尾,当你担心最后的记录可能会丢失它的换行符删除换行符。

在段落模式($/ = "")中,它删除字符串中的所有尾随换行符。 当在slurp模式($/ = undef)或定长记录模式($/是一个整数或类似的参考,请参阅perlvar)chomp()不会删除任何东西。

可以删除领先,并从字符串结尾的空白样,

$string =~ s{^\s+|\s+$}{}g