gpt4 book ai didi

windows - Windows PowerShell 和 CMD.exe 中的 PerlIO

转载 作者:可可西里 更新时间:2023-11-01 11:21:30 24 4
gpt4 key购买 nike

显然,我的 Perl 脚本会产生两个不同的输出文件,具体取决于我是在 Windows PowerShell 还是 cmd.exe 下运行它。该脚本可以在此问题的底部找到。文件句柄是用 IO::File 打开的,我相信 PerlIO 正在做一些古怪的事情。似乎在 cmd.exe 下选择的编码是更紧凑的编码 (4.09 KB),与 PowerShell 相比生成的文件大小几乎是其两倍 (8.19 KB)。此脚本采用 shell 脚本并生成 Windows 批处理文件。似乎在 cmd.exe 下生成的只是普通的 ASCII(1 字节字符),而另一个似乎是 UTF-16(前两个字节 FF FE )

有人可以验证并解释为什么 PerlIO 在 Windows Powershell 下的工作方式与 cmd.exe 不同吗?另外,如何使用 IO::File 显式获取 ASCII-magic PerlIO 文件句柄?

目前只有cmd.exe生成的文件是可执行的。 UTF-16 .bat(我认为这是编码)不能通过 PowerShell 或 cmd.exe 执行。

顺便说一句,我们正在为 MSWin32 使用 Perl 5.12.1

#!/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

关于windows - Windows PowerShell 和 CMD.exe 中的 PerlIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com