59747


perlの勉強をしているのですが、キーボードから文字が入力されるまで、入力待ちになるプログラムを試しているのですが、そのまま流れてしまいます。なぜでしょうか？  
下記サイトの、サンプルプログラムを利用させていただきました。  
<https://www.javadrive.jp/perl/stdin/index2.html>

[code]

    use strict;
    use warnings;
    use utf8;
    binmode STDIN, ':encoding(cp932)';
    binmode STDOUT, ':encoding(cp932)';
    binmode STDERR, ':encoding(cp932)';
    
    print "名前を入力して下さい\n";
    my $line = <STDIN>;
    chomp($line);
    
    print "成績を入力して下さい\n";
    my $seiseki = <STDIN>;
    chomp($seiseki);
    
    print "名前:$line, 成績:$seiseki\n";
    
[/code]

プログラムはtest3.plとしてUTF-8で保存、ターミナルからperl test3.plを実行すると下記のメッセージが出て入力画面になりません。

[code]

    ???O????͂??ĉ?????
    Use of uninitialized value $line in scalar chomp at test3.pl line 10.
    ???т???͂??ĉ?????
    Use of uninitialized value $seiseki in scalar chomp at test3.pl line 14.
    Use of uninitialized value $line in concatenation (.) or string at test3.pl line 16.
    Use of uninitialized value $seiseki in concatenation (.) or string at test3.pl line 16.
    ???O:, ????:
    
[/code]

?部分はプログラムの日本語部分は文字化けしているものと思われます。  
宜しくお願い致します。


CC BY-SA 4.0
2019-10-16T10:39:33.760
59744
2019-10-16T13:16:30.537
25524
question
perl
perlでの標準入力からの値の取得


おそらく、Windows環境でない環境でコードが動いているからだと思います。

<https://www.javadrive.jp/perl/encoding/index2.html>

> ※「cp932」はMicrosoftがShift_JISを独自に拡張した文字コードです。

とあります。

[code]

    binmode STDIN, ':encoding(cp932)';
    binmode STDOUT, ':encoding(cp932)';
    binmode STDERR, ':encoding(cp932)';
    
[/code]

上記の部分が、`cp932`で入力,出力をするという意味になっています。  
このような部分を自分の環境に合わせて書き換える必要があります。

参考までに、私の環境（macOS Mojave 10.14.6, ターミナルのText encoding:
Unicode(UTF-8))では下記のコードでうまく動きました。

[code]

    use strict;
    use warnings;
    
    print "名前を入力して下さい\n";
    my $line = <STDIN>;
    chomp($line);
    
    print "成績を入力して下さい\n";
    my $seiseki = <STDIN>;
    chomp($seiseki);
    
    print "名前:$line, 成績:$seiseki\n";
    
[/code]


CC BY-SA 4.0
2019-10-16T13:16:30.537
59747
2019-10-16T13:16:30.537
9008
59744
answer