perl print文で日本語表示するには
perlのプログラムで
use utf8が宣言されていない時(test1.pl)は、
print文で日本語が正しく表示されるのですが、
use utf8が宣言されている時(test2.pl)は、
print文で日本語が正しく表示されないかエラーになります。
encode('utf-8', $string)やencode('cp932', $string)
も試してみましたがうまくいきませんでした。
どのようにすればよいでしょうか。
---test1.pl------------------------------------------------
#!C:/perl/bin/perl
use strict;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n";
print $string;
-----------------------------------------------------------
実行結果 OK
2018年12月26日 9時36分6秒
-----------------------------------------------------------
---test2.pl------------------------------------------------
#!C:/perl/bin/perl
use strict;
use utf8;
use Encode;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n";
print $string;
#print encode('utf-8', $string);
#print encode('cp932', $string);
---------------------------------------------------
実行結果 NG (PC1 Windows7 ActivePerl)
Wide character in print at D:\test\test2.pl line 11.
Global symbol "$year年" requires explicit package name (did you forget to declare "my $year年"?) at D:\test\test2.pl line 8.
Global symbol "$mon月" requires explicit package name (did you forget to declare "my $mon月"?) at D:\test\test2.pl line 8.
Global symbol "$mday日" requires explicit package name (did you forget to declare "my $mday日"?) at D:\test\test2.pl line 8.
Global symbol "$hour時" requires explicit package name (did you forget to declare "my $hour時"?) at D:\test\test2.pl line 8.
Global symbol "$min分" requires explicit package name (did you forget to declare "my $min分"?) at D:\test\test2.pl line 8.
Global symbol "$sec秒" requires explicit package name (did you forget to declare "my $sec秒"?) at D:\test\test2.pl line 8.
Execution of D:\test\test2.pl aborted due to compilation errors.
-----------------------------------------------------
実行結果 NG (PC2 Windows7 ActivePerl)
Malformed UTF-8 character (unexpected continuation byte 0x94, with no precedingstart byte) at C:\test\test2.pl line 8.
(略)
Malformed UTF-8 character (unexpected continuation byte 0x95, with no precedingstart byte) at C:\test\test2.pl line 8.
2018 N12 26 9 5 4 b
-----------------------------------------------------
期待している実行結果
2018年12月26日 9時36分6秒
-----------------------------------------------------
よろしくお願いします。
お礼
$a,$b以外にしましたらエラーが報告されました。 ありがとうございました。 なお、 >次のようにすると、確認することができます。 ということで ---test.pl--- use strict; print "\$main::a $main::a\n"; $a = "Hello"; print "\$main::a $main::a\n"; ------------- を実行すると ------------- C:\test>test.pl $main::a $main::a Hello C:\test> ------------- という結果になったのですが これは何を確認したことになるのでしょうか。