2016-02-07 96 views
-1

我有以下代码:为什么我仍然会换行?

open INPUT, "input.txt"; 
my $line = ""; 
while (<INPUT>) 
{ 
     $line = $_; 
     $line =~ s/\s+^//; 
     print $line; 
} 

但产量仍包括了所有的换行。我也试过\v\R

+0

的可能的复制。[Perl的:函数修剪串前后空白](http://stackoverflow.com/questions/4597937/perl-function-to-trim-string-leading-and-trailing-空格) – JGreenwell

+0

@JGreenwell H ow可能是重复的吗?我已经提供了一段代码摘录,其中明确包含了以下由ruakh指出的错误。 – CJ7

+0

因为你的实际问题是我如何删除尾部空白和解决你的问题的正则表达式在链接问题的答案(还包括关于chomp与正则表达式的注释) – JGreenwell

回答

2

/\s+^/意味着“一个或多个空格字符开始的字符串之前” —所以它永远不会匹配。

如果你的目标是消除尾随空白字符,那么你需要$而不是^

$line =~ s/\s+$//; 

(如果你的目标其实只是删除尾随换行符,那么你或许应该使用the built-in chomp function

+0

'chomp'在我尝试时不工作 – CJ7

+5

@ CJ7:就是这样。 。 。不是一个非常有用的陈述。我的意思是,显然'chomp'起作用。这并不像它一直被打破,也没有人注意到过。如果你遇到困难,你需要提供更多关于你如何使用它以及发生了什么问题的信息。 – ruakh

+0

我使用'chomp $ line'而不是上面的正则表达式行,它仍然输出所有换行符。 – CJ7