Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 佩尔蒂为什么要去斯都特?_Perl_Perl Tidy - Fatal编程技术网

Perl 佩尔蒂为什么要去斯都特?

Perl 佩尔蒂为什么要去斯都特?,perl,perl-tidy,Perl,Perl Tidy,我有一个bash命令,getmodifiedperlfiles,它返回我在存储库中修改过的所有perl文件。我想对所有这些文件使用perltidy 我创建了一个bash函数来完成这项工作: tidy(){ 对于f,在'get modified perl文件中` 做 回声$f perltidy-b$f 完成 } 根据perltidy的帮助页面,-b选项应创建我的原始文件的备份,并对其进行适当修改: -b将原始文件备份到.bak并就地修改文件 但是,当我启动bash函数时,不会创建备份。我的文件不

我有一个bash命令,
getmodifiedperlfiles
,它返回我在存储库中修改过的所有perl文件。我想对所有这些文件使用perltidy

我创建了一个bash函数来完成这项工作:

tidy(){
对于f,在'get modified perl文件中`
做
回声$f
perltidy-b$f
完成
}
根据perltidy的帮助页面,-b选项应创建我的原始文件的备份,并对其进行适当修改:

-b将原始文件备份到.bak并就地修改文件

但是,当我启动bash函数时,不会创建备份。我的文件不会被修改,但perltidy的输出会打印在标准输出上。因此,我决定将我的电话改为perltidy:

\cp$f$f.bak
perltidy$f>$f
现在,当我运行命令时,文件的备份已正确完成,但原始文件已清空,并显示以下消息:

正在跳过文件:file.pl:零大小

我已经找到了一种解决方法,可以提供我想要的结果,但似乎有些牵强:

\cp-f$f$f.bak
回显“$(perltidy$f)”>$f
为什么-b选项不起作用?有没有办法不用这种奇怪的重定向来完成同样的工作


编辑:这是我的
.perltidyrc
文件:

--perl-best-practices
--no-standard-error-output
--closing-side-comments
--closing-side-comment-interval=10
--blanks-before-subs
--blanks-before-blocks
--maximum-line-length=130
默认情况下,不会将文件内容打印到标准输出。为此,需要使用
-st
选项(或
--standard output
)。由于您没有在
perltidy
命令行上使用此选项,因此可能有一个
.perltidyrc
文件正在使用,其中包含
-st

要忽略
.perltidyrc
文件,请使用
-npro
-noprofile
)选项:

请参阅手册页的“使用.perltidyrc命令文件”部分,了解您的安装版本:

perldoc perltidy
有关其他调试信息,您可以运行:

perltidy -dpro
perltidy -dop

另一种可能是将
perltidy
命令别名为
perltidy-st
。您应该能够避免使用以下别名:

\perltidy -npro -b $f 

现在,您编辑了问题以显示
.perltidyrc
文件,罪魁祸首似乎是:

--perl-best-practices
更改rc文件,或者如上所述忽略它

另见

perltidy$f>$f


这将永远不会做你想要的,任何程序。使用
$f
运行程序时,这会告诉shell您希望程序在其标准输出连接到
$f
的情况下运行。因此,在程序运行之前,shell会打开
$f
进行写入,这会破坏文件的内容。然后它将句柄连接到子对象中的stdout,然后运行perltidy,它尝试读取
$f
,并找到。。。没有,因为原来的内容已经被删除了。这不是成功的秘诀。这就是为什么perltidy首先有自己的“就地编辑”功能。

对于不提供就地编辑的实用程序,
海绵
实用程序非常有用<代码>程序文件>文件可以使用
程序文件|海绵文件
解决。这是
--perl-best-practices