Perl 在 while 循环中挂起
Perl hangs up on while loop
此代码由于某种原因挂起,或者在查询 while (<>) { $file .= $_};
时不再继续。这是为什么?
一旦我用输入的文本启动代码,它就不会输出 task1
然后挂起。
代码:
#!/usr/bin/perl -w
use strict;
use JSON;
my $json = JSON->new->allow_nonref;
my $file = "";
print('task1');
while (<>) { $file .= $_ };
print('task2');
my $json_output = $json->decode( $file );
my ($c, $i, $cstr, $istr);
foreach my $cert (@$json_output) {
print('task3');
$i = $json_output->{i};
$c = $json_output->{c};
$istr = join("", map { sprintf("%02x",$_) } @$i);
$cstr = pack("C*", @$c);
open(F, ">$istr.der"); print F $cstr; close(F);
print('done.');
}
输出:
task1
你如何调用你的代码? <>
运算符意味着它从您指定为参数的所有文件或标准输入中获取输入。如果您不带任何参数调用脚本,它将等待控制台输入。
如果你不带参数调用它,尝试在它“挂起”时输入几行文本,然后输入Ctrl+D 如果你在 Linux,或者 Ctrl+Z 在 Windows。这应该使脚本工作。
这一行
while (<>) { $file .= $_ };
正在尝试从命令行指定的文件中读取,如果没有,则从标准输入中读取。如果没有任何内容通过管道传输到标准输入,那么它将等待您在键盘上输入内容。
所以我猜您没有在命令行中指定文件,您的程序正等待从标准输入中获取输入。
此外,将整个文件读入单个变量的更简单方法如下:
my $file = do { local $/; <> };
有关其他选项,请参阅 this article。
此代码由于某种原因挂起,或者在查询 while (<>) { $file .= $_};
时不再继续。这是为什么?
一旦我用输入的文本启动代码,它就不会输出 task1
然后挂起。
代码:
#!/usr/bin/perl -w
use strict;
use JSON;
my $json = JSON->new->allow_nonref;
my $file = "";
print('task1');
while (<>) { $file .= $_ };
print('task2');
my $json_output = $json->decode( $file );
my ($c, $i, $cstr, $istr);
foreach my $cert (@$json_output) {
print('task3');
$i = $json_output->{i};
$c = $json_output->{c};
$istr = join("", map { sprintf("%02x",$_) } @$i);
$cstr = pack("C*", @$c);
open(F, ">$istr.der"); print F $cstr; close(F);
print('done.');
}
输出:
task1
你如何调用你的代码? <>
运算符意味着它从您指定为参数的所有文件或标准输入中获取输入。如果您不带任何参数调用脚本,它将等待控制台输入。
如果你不带参数调用它,尝试在它“挂起”时输入几行文本,然后输入Ctrl+D 如果你在 Linux,或者 Ctrl+Z 在 Windows。这应该使脚本工作。
这一行
while (<>) { $file .= $_ };
正在尝试从命令行指定的文件中读取,如果没有,则从标准输入中读取。如果没有任何内容通过管道传输到标准输入,那么它将等待您在键盘上输入内容。
所以我猜您没有在命令行中指定文件,您的程序正等待从标准输入中获取输入。
此外,将整个文件读入单个变量的更简单方法如下:
my $file = do { local $/; <> };
有关其他选项,请参阅 this article。