【发布时间】:2017-03-13 00:29:17
【问题描述】:
我是使用 Perl 替换包含“/”的字符串的字符串,使用下面的代码
file.txt 包含
/usr/open/xyz -getCh $svr
代码
open(FILE, "</tmp/file.txt") || die "File not found";
my @lines = <FILE>;
close(FILE);
my $stringToReplace = "\/usr\/open\/xyz -getCh \$svr";
my $stringToReplaceWith = "echo \"y\" | \/usr\/open\/xyz -getCh \$svr";
my @newlines;
foreach(@lines) {
$_ =~ s/$stringToReplace/$stringToReplaceWith/g;
push(@newlines,$_);
}
open(FILE, ">/tmp/file.txt") || die "File not found";
print FILE @newlines;
close(FILE);
上面的代码对我不起作用。
【问题讨论】:
-
这与斜线无关。问题是(可能)正则表达式中的
$查找字符串结尾,而不是文字美元符号。但是“代码不起作用”并不是问题描述,而且您似乎没有花任何精力自己去追踪问题(您的代码远非最小)。 -
用
use strict; use warnings;开始每个Perl文件。 -
使用词法变量,而不是裸字文件句柄。
-
使用 3-arg 打开,而不是 2-arg 打开。
-
File not found不是一个有用的错误消息,特别是如果这不是实际问题。在错误消息中包含您尝试打开的文件的名称,以及$!(其中包含打开失败的真正原因)。
标签: perl