2009-04-28 71 views
2

我在连接到远程服务器的个人计算机上编写脚本。我认为远程服务器安装了Perl 4.0或更低版本,这就是为什么它无法识别相同的原因。是否有另外一个chomp命令?如果我有Perl 4,我该如何chomp一个字符串?

+4

Perl 4?真的吗? Perl 5已经出现了将近15年 - 自1994年10月17日以来,确切而言就是这样。你连接到一台尚未升级的机器?我建议再次检查。 – Tanktalus 2009-04-28 15:17:29

+0

有些机器只有Perl 4才有。你不必喜欢它,但它是真的。 – 2009-04-29 14:23:16

回答

5

这不是一个确切的替代品,但你可以尝试:

$var =~ s/\r?\n?$// 

这将剥夺或者CRLF(DOS),LF(UNIX),CR(Mac吗?)。

正常的chomp操作符总是将当前定义的$INPUT_RECORD_SEPARATOR去掉当前的O/S。

+0

好主意,但如果$ var可能包含多个\ n分隔的行,请注意 - 根据Perl 4在正则表达式中解释“$”的方式,上述可能会删除第一个\ n而不是最后一个。 – 2009-04-28 18:30:05

0

我相信chop()被用在pre-5 perl中。不如chomp()当然有用。如果你正在处理随机输入你很可能会更好使用正则表达式,但如果你总是解析UNIX格式的文件:

while (<F>) { 
    chop(); 
    do_stuff(); 
} 

如下状态的评论,印章()始终删除最后左值的字符,而不仅仅是换行符(或var结尾的内容)。我知道这个(因此“不如chomp()”评论)有用,但忘了实际输入它。

1

去砍路线是不好的建议,我会使用正则表达式,他们更可持续和透明的其他人。习惯性地修改记录变量最终会最终影响一些不好的包并导致奇怪的事情发生。

相关问题