从perl变量中删除空格

时间:2013-06-26 20:53:59

标签: string perl variables whitespace

我在进行简单的搜索和替换方面遇到了很多麻烦。我尝试了提供的解决方案 How do I remove white space in a Perl string? 但无法打印出来。

以下是我的示例代码:

#!/usr/bin/perl
use strict;
my $hello = "hello world";
print "$hello\n"; #this should print out >> hello world
#now i am trying to print out helloworld (space removed)
my $hello_nospaces = $hello =~ s/\s//g;
#my $hello_nospaces = $hello =~ s/hello world/helloworld/g;
#my $hello_nospaces = $hello =~ s/\s+//g;
print "$hello_nospaces\n"
#am getting a blank response when i run this.

我尝试了几种不同的方式,但我无法做到这一点。

我的最终结果是在linux环境中自动移动文件的某些方面,但有时文件名中有空格,所以我想从变量中删除空格。

4 个答案:

答案 0 :(得分:19)

你几乎就在那里;你对运营商的优先权感到困惑。您要使用的代码是:

(my $hello_nospaces = $hello) =~ s/\s//g;

首先,这会将变量$hello的值赋给变量$hello_nospaces。然后它在$hello_nospaces上执行替换操作,就像你说的那样

my $hello_nospaces = $hello;
$hello_nospaces =~ s/\s//g;

因为绑定运算符=~的优先级高于赋值运算符=,所以编写它的方式

my $hello_nospaces = $hello =~ s/\s//g;

首先在$hello上执行替换,然后将替换操作的结果(在本例中为1)分配给变量$hello_nospaces

答案 1 :(得分:9)

5.14起,Perl提供non-destructive s/// option

  

非破坏性替代

     

替换(s///)和音译(y///)运算符现在支持复制输入变量的/r选项,在副本上执行替换,并返回结果。原件保持不变。

my $old = "cat";
my $new = $old =~ s/cat/dog/r;
# $old is "cat" and $new is "dog"
  

这对map特别有用。有关更多示例,请参阅perlop

所以:

my $hello_nospaces = $hello =~ s/\s//gr;

应该做你想做的事。

答案 2 :(得分:4)

您只需要添加括号,以便Perl的解析器可以理解您希望它做什么。

my $hello = "hello world";
print "$hello\n";

(my $hello_nospaces = $hello) =~ s/\s//g;
print "$hello_nospaces\n";

## prints 
## hello world
## helloworld

答案 3 :(得分:3)

拆分此行:

my $hello_nospaces = $hello =~ s/\s//g;

进入这两个:

my $hello_nospaces = $hello;
$hello_nospaces =~ s/\s//g;

来自官方Perl Regex Tutorial

  

如果匹配,则s ///返回所做的替换次数;否则返回false。