【发布时间】:2020-10-27 07:05:07
【问题描述】:
这与this question有关
以反斜杠字符结尾的所有行的组合完成。以下 Perl 命令在终端中有效,但在 Perl 脚本中无效:
perl -i -p -e 's/\\\n//' input_file
在 Perl 脚本中,我是这样设置的,但它不起作用:
`perl -i -p -e 's/\\\n//' $input_file_path_variable`;
**更新了文件内容和使用的代码
输入文件内容如下:
foo bar \
bash \
baz
dude \
happy
想要的输出内容:
foo bar bash baz
dude happy
当前脚本:
#!/usr/bin/env perl
use Getopt::Long;
use FindBin;
use File::Path;
use File::Copy;
use DirHandle;
use FileHandle;
use File::Basename;
use Env;
use File::Slurp;
my $dummy_file = "/wdir/dummy.txt";
my $file_content = read_file($dummy_file);
print "$file_content\n";
print "==============================================\n"
my $ttest = $file_content =~ s/\\\n//;
print "$ttest\n";
电流输出
foo bar \
bash \
baz
dude \
happy
==============================================
1
【问题讨论】:
-
反引号充当双引号字符串文字,
\\在双引号字符串文字中变为\。 /// 另外,你有一个代码注入错误。这不是创建 shell 命令的正确方法。请参阅字符串::ShellQuote。 /// 最后,为什么要对一个不向 STDOUT 产生输出的程序使用反引号?您可以通过使用system的多参数形式来避免使用 String::ShellQuote。 -
@tobyink 是的,我可以知道正确的方法吗?我尝试将整个文件读入一个变量并应用 Oliver 的答案,但无法获得所需的输出。
-
向我们展示您的代码、您正在使用的输入,以及它如何不工作的演示。
-
@TLP 我不好,我已经用所用的输入更新了问题。你的假设是对的,你的回答解决了我的问题。谢谢。
-
@tobyink 指出在另一个 Perl 脚本的反引号中不使用 Perl 单行,我不知道这是一个坏主意。认为这是做我想做的事情并更改输入文件内容的最快方法。