use utf8;を使用して"Wide character in print at〜"というエラー文が出た時の対処について
下記サブルーチンを実行したところ、"Wide character in print at〜"というメッセージが表示された。
&print_temp($temp_ref, $date); sub print_temp{ my ($temp_ref, $date) = @_; printf (qq/%sの12:00の気温は%s°cです。\n/, $date, $temp_ref->{"12pm_temp"}); printf (qq/%sの最高気温は%s°cです。\n/, $date, $temp_ref->{"temp_max"}); printf (qq/%sの最低気温は%s°cです。\n/, $date, $temp_ref->{"temp_min"}); }
エンコーディングしていないのが問題だと判明。
参考:Perl の文字列エンコーディングの話 | Hachioji.pm 日めくりテックトーク
先ほどのコードの書き方だと、内部表現をそのまま出力しようとしていたようで、下記のようにエンコードしたところエラーが消えた。
&print_temp($temp_ref, $date); sub print_temp{ my ($temp_ref, $date) = @_; my $str_1 = qq/$date/.qq/の12:00の気温は$temp_ref->{"12pm_temp"}°cです。\n/; my $str_2 = qq/$date/.qq/の最高気温は$temp_ref->{"temp_max"}°cです。\n/; my $str_3 = qq/$date/.qq/の最低気温は$temp_ref->{"temp_min"}°cです。\n/; my $enc_str_1 = encode('utf-8', $str_1); my $enc_str_2 = encode('utf-8', $str_2); my $enc_str_3 = encode('utf-8', $str_3); print $enc_str_1; print $enc_str_2; print $enc_str_3; }