Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-pi-e';s//';文件名在perl脚本中不起作用。但它在命令行中工作_Perl - Fatal编程技术网

Perl-pi-e';s//';文件名在perl脚本中不起作用。但它在命令行中工作

Perl-pi-e';s//';文件名在perl脚本中不起作用。但它在命令行中工作,perl,Perl,我有一个perl脚本,在该脚本中,我需要替换文件每行中的一个字符串。我在perl脚本的下面一行中使用了。它显示了-pi-e附近的语法错误。我做错了什么 perl -pi -e 's/ / /' filename 我有一个管道分隔的文件要在perl脚本中使用。我使用BCP将文件内容加载到表中。我用8个clomun创建了这个表,但以管道分隔的文件只有7列。在该文件中,我需要在每个记录的末尾添加“|”(管道后跟空格)符号。因此,它将匹配表和BCP文件中的列数。因此,在perl脚本的一部分中,我需要

我有一个perl脚本,在该脚本中,我需要替换文件每行中的一个字符串。我在perl脚本的下面一行中使用了。它显示了
-pi-e
附近的语法错误。我做错了什么

perl -pi -e 's/ / /' filename 

我有一个管道分隔的文件要在perl脚本中使用。我使用BCP将文件内容加载到表中。我用8个clomun创建了这个表,但以管道分隔的文件只有7列。在该文件中,我需要在每个记录的末尾添加“|”(管道后跟空格)符号。因此,它将匹配表和BCP文件中的列数。因此,在perl脚本的一部分中,我需要使用's/$/\\\\\/'概念。但我喜欢在perl脚本中的单行中完成这项工作。(就像在命令行中工作的perl-pi-e的//$/\\|/’)

该行是shell命令。不是perl脚本。此行调用perl并为其提供程序:

s/ / /

Plus设置某些选项(-p,-i),但它仍然是shell程序调用,而不是Perl表达式。

命令行代码是为shell编写的,在shell将控制权传递给
Perl
编译器/解释器程序之前进行解析

我们可以使用后端处理器来查看像这样执行的Perl代码

$perl -MO=Deparse -pi -e 's/ / /' filename
它显示了等效的Perl程序

BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
    s/ / /;
}
continue {
    die "-p destination: $!\n" unless print $_;
}

但是为什么在打印之前要用另一个空间替换每个空间

从这个问题来看,我认为提出
B::Deparse
没有多大帮助,这是一个非常高级的工具。一般来说,这是一个很好的答案,但特别像最后一行。@doubleDown:知道实际发生了什么很有帮助。这就是他们问题的本质,对正在发生的事情缺乏理解。@doubleDown:我不是在解释如何使用
B:Deparse
,我是在解释命令行程序相当于一个Perl脚本。我在Perl脚本中使用了一个管道分隔的文件。我使用BCP将文件内容加载到表中。我用8个clomun创建了这个表,但以管道分隔的文件只有7列。在该文件中,我需要在每个记录的末尾添加“|”(管道后跟空格)符号。因此,它将匹配表和BCP文件中的列数。因此,在perl脚本的一部分中,我需要使用's/$/\\\\\/'概念。但我喜欢在perl脚本中的单行中完成这项工作。(就像在命令行中工作的perl-pi-e的//$/\\\\;/)一样,我有一个管道分隔的文件用于perl脚本。我使用BCP将文件内容加载到表中。我用8个clomun创建了这个表,但以管道分隔的文件只有7列。在该文件中,我需要在每个记录的末尾添加“|”(管道后跟空格)符号。因此,它将匹配表和BCP文件中的列数。因此,在perl脚本的一部分中,我需要使用's/$/\\\\\/'概念。但我喜欢在perl脚本中的单行中完成这项工作。(类似于在命令行中工作的perl-pi-e的/$/\\|/)
$^I = "";
while (<>) {
    s/ / /;
    print;
}