当前位置:  开发笔记 > 编程语言 > 正文

为什么我的Perl单行程不能在Windows上运行?

如何解决《为什么我的Perl单行程不能在Windows上运行?》经验,为你挑选了2个好方法。

在Windows命令提示符下,我生成一个目录中所有文件的文本文件:

dir c:\logfiles /B > config.txt

输出:

0001_832ec657.log
0002_a7c8eafc.log

我需要将"config.txt"文件提供给另一个可执行文件,但在此之前,我需要修改该文件以添加可执行文件所需的一些其他信息.所以我使用以下命令:

perl -p -i.bak -e 's/log/log,XYZ/g' config.txt

我期待结果是:

0001_832ec657.log,XYZ
0002_a7c8eafc.log,XYZ

但是,不会修改"config.txt"文件.使用"-w"选项,我收到警告消息:

在-e第1行的void上下文中无用的常量.

我究竟做错了什么?



1> ephemient..:

Windows cmd.exe不仅'用作字符串分隔符".你在做什么相当于:

perl -p -i.bak -e "'s/log/log,XYZ/g'" config.txt

所以-w抱怨"你给了我一根绳子,但它什么也没做".

解决方案是使用双引号:

perl -p -i.bak -e "s/log/log,XYZ/g" config.txt

或者简单地将它们关闭,因为在这个命令中没有可以被解释的元字符cmd.exe.

附录

cmd.exe对于任何习惯于sh贝壳的人来说,这只是一个非常麻烦的野兽.以下是有关perl调用的其他一些常见故障和解决方法.

@REM doesn't work:
perl -e"print"
@REM works:
perl -e "print"
@REM doesn't work:
perl -e "print \"Hello, world!\n\""
@REM works:
perl -e "print qq(Hello, world!\n)"



2> Chas. Owens..:

ephemient的回答很好地总结了这个问题,但你确实有另一个选择:将你的shell更改cmd.exe为更好的shell.如果你是一个Unix类型的人,那么我建议调查Cygwin,它提供了你习惯的环境(例如,Bash和GNU实用程序).

如果您是Windows类型的人,我建议您查看PowerShell(néeMSHnéeMonad).事实上,即使你是Unix类型的人,我也建议你研究一下PowerShell.它与.NET集成并具有许多简洁的功能(比如通过管道而不是简单的文本行传递对象).如果我被困在Microsoft OS上,它就是我将使用的shell.

Windows的其他shell,人们似乎喜欢:

UWIN

MinGW的

UnixUtils

Microsoft Windows Services for UNIX(SFU)

MKS工具包


Cmd.exe糟透了,如果它足以让你的shell更改值得考虑.另一个shell值得考虑.MSYS和MinGW提供了比Cygwin更轻量级的unix环境.他们也值得研究.http://www.mingw.org/
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有