- ベストアンサー
Perlのプログラムでコード変換の説明
- Perlのプログラムでコード変換の説明をします。
- コード変換のプログラムの上記の部分は、日本語のエスケープシーケンスを設定するためのものです。
- この部分では、日本語の文字コードの変換に使用されるエスケープシーケンスを定義しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
それで、jcode.pl の何が知りたいのでしょうか? 「jcode.plを使いたいから、その使い方が知りたい」のか 「perlの勉強のため、jcode.plを読み解いているが、コードの意味が分からない」のか、 その理由によって回答も変わってきます。 前者なら、ANo.1がほぼ答えの全てです。 詳しくは http://mikeneko.creator.club.ne.jp/~lab/kcode/jcode.html#h2-5 を読んでください。 後者だとしたら、まずは上記リンクを読んで、この関数の仕様を把握してください。内容は基本的に、仕様そのままです。 各行の処理内容は以下の通り。 ・jis_inout 1行目: jis_inout呼び出しの第一引数が指定されている場合は、それを$esc_0208 に代入します。指定されていない場合はもとのまま。 2行目: $esc_0208が1文字だけの場合は、頭に "\e\$"を補います。 3行目: jis_inout呼び出しの第一引数が指定されている場合は、それを$esc_asc に代入します。指定されていない場合はもとのまま。 4行目: $esc_ascが1文字だけの場合は、頭に "\e\("を補います。 5行目: 変更後のエスケープシーケンスを返します。 ・get_inout 1行目: ローカル変数の宣言 2行目: 引数文字列が $re_jis0208 にマッチするかどうか調べ、マッチする場合は、マッチした文字列を $esc_0208 に代入 3行目: 引数文字列が $re_asc にマッチするかどうか調べ、マッチする場合は、マッチした文字列を $esc_asc に代入 4行目: マッチした文字列のリストを返す となってます。
その他の回答 (1)
- mtaka2
- ベストアンサー率73% (867/1179)
挙げられたコードだけでは、各文の個々の意味はわかっても、全体でなにをやってるかははっきりとはわからないです。 特に、get_inout については、「$re_jis0208」「$re_asc」は何が入ってるのか不明ですし。 で、以下は多分に想像が含まれる推測というか、コメントを訳しただけの説明ですが、 jis_inout: 日本語(JIS X 0208)の前後に入れるエスケープシーケンスを返す get_inout: 引数で指定した文字列から、使われている日本語エスケープシーケンスを取得する じゃないでしょうか。 日本語文字列のバイト列としての表現方法(エンコーディング)には、Shift_JIS、EUC-JP、ISO-2022-JP、UTF-8などがありますが、ISO-2022-JP (いわゆるJIS)では、 ・ASCII文字列から日本語文字列への境目に、日本語文字列に切り替わることを示す文字列を入れる(通常は「\e\$B」、旧JISの場合は「\e\$@」) ・日本語文字列からASCII文字列への境目に、ASCII文字列に切り替わることを示す文字列を入れる(通常は「\e(B」、「\e\(J」の場合も) ようになってます。 http://x68000.q-e-d.net/~68user/webcgi/char-code-1.html#4 もっとも、昔の日本語に対応していなかたったころのperlで日本語処理する場合は、こういうコードを書く必要がありましたが、 今時のperlでは日本語文字列処理するライブラリが揃っていますので、こんなコードが必要になることはありません。 何のコードを読み解こうとしているのかわかりませんが、見ているコードが今読むには古くさすぎるような気がします。
補足
すみません、説明が不足していました 質問のプログラムはjcode.plの一部になります
お礼
まさに後者の通りです。 わかりやすい説明に加え、参考サイトまで教えていただき本当にありがとうございました。