此代碼由于某種原因掛斷,或者在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("x",$_) } @$i);
$cstr = pack("C*", @$c);
open(F, ">$istr.der"); print F $cstr; close(F);
print('done.');
}
輸出:
task1
uj5u.com熱心網友回復:
這條線
while (<>) { $file .= $_ };
正在嘗試從命令列上指定的檔案中讀取,如果沒有,則從標準輸入中讀取。如果沒有任何東西通過管道傳輸到標準輸入,那么它就等著你在鍵盤上輸入一些東西。
所以我猜你沒有在命令列上指定一個檔案,你的程式坐在那里等待從標準輸入中獲取輸入。
此外,將整個檔案讀入單個變數的更簡單方法如下:
my $file = do { local $/; <> };
有關其他選項,請參閱本文。
uj5u.com熱心網友回復:
你如何呼叫你的代碼?該<>操作裝置,它需要從任的所有檔案輸入您指定作為引數,或從標準輸入。如果你不帶引數呼叫你的腳本,它會坐等控制臺輸入。
如果你把它稱為不帶引數,嘗試輸入文本的幾行,當它被“掛”,然后鍵入Ctrl D,如果你是在Linux上,或Ctrl Z在Windows上。這應該使腳本作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/399585.html
