我偶爾需要評估Reply(Perl 的 REPL)中的陳述句,這些陳述句回傳的值需要很長時間才能列印出來--有時我發現自己要等待幾分鐘才能回傳提示。在這段時間里,我無法評估任何更多的代碼。
例如,如果我試圖將從 FASTA 檔案中讀取的大型 DNA 序列分配給一個變數,我將不得不在 Reply 列印該序列時等待。
明確地說,我遇到的問題是 Reply 只能以如此快的速度列印到終端,而這意味著我必須進行不必要的等待。我并不介意等待一個需要長時間評估的陳述句,因為我正在呼叫一個正在進行耗時操作的子程式。
這里有一個最小的可重復的例子,你可以用 Reply 測驗一下,看看你在運行第二行后必須等待很長時間。
sub long_return_value { return "ATCG" x 10000000 。}
my $seq = long_return_value。
如何抑制單個陳述句的輸出,使我不必等待?
我如何抑制單個陳述句的輸出,使我不必等待?
澄清。為什么我不介意在陳述句需要評估很長時間的情況下進行等待?好吧,我通常希望將評估陳述句的結果用于我的下一條陳述句。
uj5u.com熱心網友回復:
嘗試安裝Async然后開始像這樣回復:
reply -MAsync
對于你的第一個命令,輸入:
sub BG( & ) { my $code = shift; Async->new( sub { print "后臺作業完成。", &$code, "
" } ); "后臺作業開始"; }
現在,如果你有一個你知道將長期運行的作業,請輸入:
BG { your_code_here; ...; }
它將顯示 "后臺作業開始",你將立即得到你的終端來輸入。當后臺作業完成時,它將列印到螢屏上(可能會惱人地打斷你正在做的事情)。
如果你想要一個輸出更安靜的版本:
sub BGq(& ) { my $code = shift; Async->new( sub { &$code } ); }
注意,后臺代碼是在一個分叉行程中執行的,所以不能影響Reply的全域狀態。
uj5u.com熱心網友回復:
Reply只向你顯示你給它的最后一個陳述句的評估結果,所以一個變通方法是在回傳一個需要長時間列印的值的陳述句之后添加一個return陳述句。 例如,
long_return_value; return;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/311368.html
標籤:
