WindowsXPにインストールしたperl, v5.8.7で、「タ」の置換を行いたいのですが、
なぜかできません。
その他の文字はできます。
ソースですが、
$line ="タチツテト";
$before = "タ";
$after = "た";
$line =~ s/$before/$after/;
print $line;
です。
ソースは、SJISで書いてます。
よろしくお願いします。
正規表現ではShift-JISは正しく扱えません。
日本語を正しく扱いたい場合は、Perlが文字を扱うときの内部形式にデコード
する必要があります。
use encoding 'sjis'; は以下のような内容を自動で行ってくれます。
#!/usr/bin/perl use strict; use warnings; use Encode; # decode, encode 関数を使うため。 # ソースコードがShift-JISの場合は、文字列リテラルもShift-JISになります。 my $line ="タチツテト"; my $before = "タ"; my $after = "た"; # Shift-JISからPerlの内部形式にデコードします。 $line = decode( 'shift-jis', $line ); $before = decode( 'shift-jis', $before ); $after = decode( 'shift-jis', $after ); $line =~ s/$before/$after/; # 出力するときは、Shift-JIS にエンコードします。 print encode( 'shift-jis', $line ); __END__
http://www.rwds.net/kuroita/program/Perl_unicode.html#encoding
だっけ?
質問した記録残したいんですが、キャンセル扱いになってしまいますので・・・。
お手数お掛けしてすみませんが、よろしくお願いします。