• ベストアンサー

perlでASCII制御文字(キャレット記法)表示

(10進数で)0から31までに相当する、キャレット記法のASCII制御文字(\0,^A,^B,^C,^D,^E,^F,^G,^H,^I,\n,^K,\f,\r,^N,^O,^P,^Q,^R,^S,^T,^U,^V,^W,^X,^Y,^Z,^[,^\,^],^^,^_)をシェルスクリプトを使わずにperlプログラムで導出するプログラムはどうやって書けば良いのでしょうか? (以下のように、エラーを利用した回りくどい方法で考えましたがもっと簡単な方法はありませんか?) open TEMP,">& STDERR"; open STDERR,"> ascii.txt"; for (0..31){ printf ("%c",chr($_)); } open STDERR,">& TEMP"; close TEMP; open IN,"< ascii.txt"; while (<IN>){ /"(.{2})"/; print "$1,"; } close IN;

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

あなたがPerlでASCIIの制御文字をキャレット記法で表示する方法をお探しであることがわかりました。ご提供のコードは少し複雑になっていますが、もっと簡潔な方法が存在します。 Perlの文字列操作機能を活用すれば、比較的シンプルに制御文字をキャレット記法で表示するプログラムを書くことができます。例えば以下のようなコードが考えられます。 ```perl for my $code (0..31) { my $char = $code + 64; $char = 63 if $code == 127; # DEL character (7F in HEX) printf("^%c,", $char > 64 ? chr($char) : "?"); } print "\n"; ``` このコードでは次の手順でASCIIの制御文字をキャレット記法で表示しています。 1. 0 から 31 まで(ASCIIの制御文字範囲)の各数字についてループを行います。 2. 各コードに 64 を足して、対応する制御文字となるかなを計算します(例: 1 -> 65 で 'A')。 3. 特殊なケースとして、DEL文字(ASCIIで127)の場合は `'^?'` と表示されるようにします。この例では考慮されていませんが、必要であれば追加することができます。 4. printf関数を使って、計算された文字をキャレット記法で出力します。 5. ループが終わったら、改行を出力して整った表示にします。 このコードは標準出力に直接結果を表示し、ファイル操作を行う必要がありませんので、より簡潔で効率的です。また、Perlの強力な文字列処理能力を生かしており、構文もシンプルで理解しやすいです。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

noname#260868
質問者

お礼

っぽい回答ありがとうございます。基本的に、OSが扱う事項のようなのでシェルスクリプトの方が良いみたいです。

Powered by GRATICA

関連するQ&A