0

Debian で実行しているスクリプトからユーザー入力を読み取っているときに、Enter/Return キーを押した後ではなく、Ctrl-D を押した後にのみユーザー入力が終了することがわかりました。

my $userchoice = <>;

私のスクリプトでは、ユーザーがテキストを入力し、Return/Enter キーで終了する必要があります。私のスクリプトでこれを引き起こしている可能性があるのは何ですか?

スクリプトの早い段階で丸呑みモードを設定すると、これに関連する可能性がありますか?

perdoc を見ましたが、そこに説明が見つかりませんでした。

sub InteractiveMenu {
    for my $key(0 .. $#desclist) {
        my $value = $desclist[$key];
        printf (" %-3s %-20s -> %-15s -> %-30s\n", $key, $desclist[$key], $iplist[$key], $filelist[$key] );
    }
    print "\nAvailable choices:\n";
    printf " (R)oot key installation [installs your public key to remote servers]\n";
    printf " (S)etup remote logging [sets up user account on remotes]\n\n";
    print "Choose a server to work on:\n"; 
    chomp(my $userchoice = <>);
}
sub ListRemotes {
    print "Listing remote servers from $Confile\n";
    open my $ReadHandle, "<", $Confile or die $!;
    local $/; # enable localized slurp mode
    chomp(my $content = <$ReadHandle>);
    close $ReadHandle;
    my @values = split('zone ', $content);
      foreach my $val (@values) {       
        #print $val."\n-------------------------\n";
        &ListWorker($val);
      }
    InteractiveMenu();  
}

ここに画像の説明を入力

4

2 に答える 2

2

スクリプトの早い段階で丸呑みモードを設定すると、これに関連する可能性がありますか?

はい。$/undef に設定すると、行の終わりまでではなく、ファイルの最後までreadline(別名) が読み取られます。<>Ctrl-D を使用すると、端末は EOF を通知します。

于 2013-08-28T21:35:34.820 に答える
0

スラープモードをリセットするには、スラープモードをスコープに入れることができます

open my $ReadHandle, "<", $Confile or die $!;
{
    local $/; # enable localized slurp mode
    chomp(my $content = <$ReadHandle>);
}
close $ReadHandle;
于 2013-08-29T11:48:22.060 に答える