documents:proglang:perl:perl-013
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| documents:proglang:perl:perl-013 [2026/05/08 11:55] – ↷ 移動操作に合わせてリンクを書き換えました。 k896951 | documents:proglang:perl:perl-013 [2026/05/17 14:59] (現在) – [置換演算子 s/// で日本語文字が含まれる置換をする] k896951 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 003.置換演算子 s/// で日本語文字が含まれる置換をする ====== | ||
| + | 2016/ | ||
| + | tr について書いたなら s についても書けば?と言われたので作成 | ||
| + | |||
| + | ===== 概要 ===== | ||
| + | |||
| + | Perlの置換演算子 s で半角英数字以外の文字を使う時の自分用お作法説明。\\ [[documents: | ||
| + | |||
| + | ===== Perl環境 ===== | ||
| + | |||
| + | < | ||
| + | $ perl -v | ||
| + | |||
| + | This is perl 5, version 20, subversion 3 (v5.20.3) built for amd64-freebsd-thread-multi | ||
| + | |||
| + | Copyright 1987-2015, Larry Wall | ||
| + | |||
| + | Perl may be copied only under the terms of either the Artistic License or the | ||
| + | GNU General Public License, which may be found in the Perl 5 source kit. | ||
| + | |||
| + | Complete documentation for Perl, including FAQ lists, should be found on | ||
| + | this system using "man perl" or " | ||
| + | Internet, point your browser at http:// | ||
| + | |||
| + | $ cat sample.pl | ||
| + | my $str = " | ||
| + | |||
| + | $str =~ s/ | ||
| + | |||
| + | print $str." | ||
| + | |||
| + | $ perl sample.pl | ||
| + | yeeeeah2yeeeeah45 | ||
| + | $ | ||
| + | </ | ||
| + | |||
| + | ===== 日本語文字が含まれる場合の対処 ===== | ||
| + | |||
| + | ==== 含まれる例 ==== | ||
| + | |||
| + | EUC-JPな環境でEUC-JPでスクリプトを書いていると、こんな感じでうまく置換されない。 | ||
| + | |||
| + | ^ なぜか全部置換&謎文字列な例 ^ | ||
| + | |<code perl sample1.pl> | ||
| + | my $str = " | ||
| + | |||
| + | $str =~ s/ | ||
| + | |||
| + | print $str." | ||
| + | </ | ||
| + | $ perl sample1.pl | ||
| + | ひゃはーひゃはーひゃはーひゃはーひゃはーひゃはーひゃはー┐劼磴蓮耳 | ||
| + | $ | ||
| + | </ | ||
| + | |||
| + | ==== UTF-8でスクリプトを作成する ==== | ||
| + | |||
| + | スクリプトでutf-8を使う旨宣言し、スクリプト自体もutf-8エンコーディングで作成していればとりあえず動作はさせられる。 | ||
| + | |||
| + | ^ use utf8;宣言 と UTF-8で記述 ^ | ||
| + | |<code perl sample3.pl> | ||
| + | use utf8; | ||
| + | use Encode; | ||
| + | |||
| + | my $str = " | ||
| + | |||
| + | $str =~ s/ | ||
| + | |||
| + | print encode(' | ||
| + | </ | ||
| + | $ perl sample3.pl | ||
| + | ひゃはーいひゃはーえお | ||
| + | $ | ||
| + | </ | ||
| + | |||
| + | Perl内部形式の文字列になっている $str をencode()関数で EUC-JP の文字列に変換している。 | ||
| + | |||
| + | ==== Encode.pmで正規表現を内部形式に変換 ==== | ||
| + | |||
| + | tr演算子の時と同様に正規表現部分や処理文字列をPerl内部形式に変換しておく。\\ | ||
| + | どうしてそうかはわからないけど、s演算子の場合は eval を使わなくてもいい。 | ||
| + | |||
| + | 以下のサンプルスクリプトは EUC-JP で書いてある。 | ||
| + | |||
| + | ^ 内部形式の正規表現、文字列を使用 ^ | ||
| + | |<code perl sample4.pl> | ||
| + | use Encode; | ||
| + | |||
| + | my $str = decode(' | ||
| + | my $from = decode(' | ||
| + | my $to = decode(' | ||
| + | |||
| + | $str =~ s/ | ||
| + | |||
| + | print encode(' | ||
| + | </ | ||
| + | $ perl sample4.pl | ||
| + | ひゃはーいひゃはーえお | ||
| + | $ | ||
| + | </ | ||
| + | |||
| + | euc-jpな環境でeuc-jpなスクリプトを書いたので、EUC-JP→内部形式/内部形式→EUC-JP の変換を decode/ | ||
| + | |||
| + | |||
| + | {{tag> | ||
documents/proglang/perl/perl-013.txt · 最終更新: by k896951
