显然,我有一个Perl脚本的结果在两个不同的输出文件,这取决于我是否在Windows PowerShell或cmd.exe下运行它。 脚本可以在这个问题的底部find。 文件句柄用IO::File打开,我相信PerlIO正在做一些棘手的事情。 看起来好像在cmd.exe下select的编码是更紧凑的编码(4.09 KB),相比PowerShell生成的文件几乎两倍的大小(8.19 KB)。 该脚本需要一个shell脚本并生成一个Windowsbatch file。 看起来像在cmd.exe下生成的只是常规的ASCII(1字节字符),而另一个似乎是UTF-16(前两个字节FF FE )
有人可以validation并解释为什么PerlIO在Windows Powershell下的工作方式与cmd.exe不同? 另外,如何使用IO::File显式获取ASCII-magic PerlIO文件句柄?
目前,只有使用cmd.exe生成的文件是可执行的。 UTF-16 .bat (我认为是编码)不能由PowerShell或cmd.exe执行。
顺便说一句,我们使用Perl 5.12.1 MSWin32
#!/usr/bin/env perl use strict; use warnings; use File::Spec; use IO::File; use IO::Dir; use feature ':5.10'; my $bash_ftp_script = File::Spec->catfile( 'bin','dm-ftp-push' ); my $fh = IO::File->new( $bash_ftp_script,'r' ) or die $!; my @lines = grep $_ !~ /^#.*/,<$fh>; my $file = join '',@lines; $file =~ s/ \n/ /gm; $file =~ tr/'t/"/d; $file =~ s/ +/ /g; $file =~ s/b"|"b/"/g; my @singleLnFile = grep /ncftp|echo/,split $/,$file; s/$PWD///g for @singleLnFile; my $dh = IO::Dir->new( '.' ); my @files = grep /.pl$/,$dh->read; say 'echo off'; say "perl $_" for @files; say for @singleLnFile; 1;
我认为你是重定向到一个批处理文件的perl脚本的输出? (不太熟悉Perl)
如果是这样你必须这样做:
perl script.pl | out-file -encoding ASCII script.bat
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。