如何在perl中去掉控制字符。。特别是[gs]?

如何在perl中去掉控制字符。。特别是[gs]?,perl,Perl,我的代码如下 my $string = $cells[71]; print $string; 这将打印字符串,但在空格应该存在的位置有一个框,其中包含01 10。我用记事本++打开它,盒子变成了一个黑色的GS(我假设它是组分隔符) 我在网上看了看,上面说: s/[^[:print:]]+//g 但当我将字符串设置为: my $string =~s/[^[:print:]]+//g 我运行我得到的程序: 4294967295 我如何解决这个问题 我照霍布斯说的做了,成功了。。。谢谢:) 我

我的代码如下

my $string = $cells[71];
print $string;
这将打印字符串,但在空格应该存在的位置有一个框,其中包含
01 10
。我用记事本++打开它,盒子变成了一个黑色的
GS
(我假设它是组分隔符)

我在网上看了看,上面说:

s/[^[:print:]]+//g
但当我将字符串设置为:

my $string =~s/[^[:print:]]+//g
我运行我得到的程序:

4294967295
我如何解决这个问题

我照霍布斯说的做了,成功了。。。谢谢:)


我是否可以打印一个enter,其中每个字符都在哪里(带有1001的框)?

您必须先分配变量,然后进行替换:

my $string = $cells[71];
$string =~ s/[^[:print:]]+//g;

在进行正则表达式匹配时,需要小心编写
$var=~/pattern/
,而不是
$var=~/pattern/
。当您使用第二个时,您正在执行
/pattern/
,这是一个与
$的正则表达式匹配,在标量上下文中返回一个数字。然后执行
~
,取该数字的位倒数,然后(
$var=
)将该结果分配给
$var
。根本不是你想要的。

请告诉我们
$cells[71]
的内容是什么。你是不是写了
my$string=~
而不是
my$string=~
?我是否可以在每个字符的位置打印一个enter(带1001的框)?-1来表示没有发布你实际运行的代码。@ikegami:那么,根据典型的SO实践,他可以更正他的帖子,而你会删除-1?这就是我所拥有的。。。对不起,我没有说明为什么投反对票?OP在替换变量之前加上了
my
关键字表明了这一错误。@Jonathan M,不是我,但可能是因为它仍然无法解释OP得到4294967295的原因。@ikegami:大概是打印4294967295,因为OP没有显示的某些代码将其存储在
$cells[7]
中,但是有一些有趣的字符,空格(什么空格?)应该在哪里。4294967295正好是0xFFFFFFFF这一事实可能不是巧合。@Keith Thompson,你是说OP没有使用
my$string
作为对一篇告诉OP不要使用
my$string
的帖子的辩护。(顺便说一句,原因见霍布斯评论。)