Windows PowerShell中的PerlIO和CMD.exe

显然,我有一个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

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...