perl初心者です。私のやりたいことができるのかどうかわからないのですが、助けてください。
以下の文(ログファイルを必要事項だけ抜き出すための表現)
$words[3]\t$words[0]\t$words[2]\t$words[1]\n
を別ファイル(設定ファイルのように)に持って、openして読み込み、
$format = $1;
↑ここに($words[3]\t$words[0]\t$words[2]\t$words[1]\n)が読み込まれている。
その後ログファイルを読み込んで、1行ずつ、$words[]に値入れた後、
printf putfile ("$format\n");#値書きだし
で編集ファイルに書き出しているのですが、どうしても、$words[]の値が展開されてくれません。
設定ファイルから読む込まず、直接
$format = "$words[3]\t$words[0]\t$words[2]\t$words[1]\n";
とすれば展開されるのですが・・・・。
別のファイルにこのような変数を含む式を記述してもだめなのでしょうか。
それともなにか、特別な方法があるのでしょうか?
教えてください。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
えーと、ちょっと分かりにくいのですが、「『ログファイル』の内容を、『別ファイル』に記述された形式に従って『編集ファイル』に書き出す」ということでいいのでしょうか?
えとですね。
$format = "$words[3]\t$words[0]\t$words[2]\t$words[1]\n";
この扱いにちょっと誤解があるようです。
Perl というのは実行前にコンパイルを行ってから実際の処理を行います。上記の文も、このときに展開処置が施されます。
ですので、「実行が始まってから」$words[3]\t$words[0]\t$words[2]\t$words[1]\n という文字列をいくら用意しても、展開は行われません。
ですので、このことに注意して記述しなければならないのです。
Perl は内部で機械語に翻訳されて動いており、インタプリタ言語じゃないんです(^_^;
この回答への補足
ご回答ありがとうございます。
わかりにくい説明で申し訳ありません。deagleさんの理解して頂いた通りのことがやりたかったのですが、もともとの私の勘違いというか誤解だったのですね。(勉強不足です。)
ばかを披露したついでに、ご回答について、もう一度ご質問です。
コンパイルを行う際に展開処理がされるということですので、
ログファイルを読み込み$words[]に値を入れた後に、設定ファイルを読み込んで$formatに$words[3]\t$words[0]\t$words[2]\t$words[1]\nをいれたとしてもそれは展開されないのですか?(^_^;
(実際にはそれでもできなかったのですが。)
呆れずにご返答下さい。
No.3
- 回答日時:
>ログファイルを読み込み$words[]に値を入れた後に
ここでいう展開処理とは、「変数入りの文字列を完全な文字列に変換する」という処理ではなく、「いつでも完全な文字列に変換できるよう準備する」という意味です。
ゆえに、$word[0] の内容が途中で変わっても正しく出力できるのです。
ですので、「ログファイルを読み込む」という処理を行った時点でコンパイルはすでに終わってしまっているので、そのあといくら$の入った文字列が来ても、$は$としてしか扱われないのです。
ほかにいくらでもやりようはあると思いますので、そっちを模索した方が早いですよ(^_^;
親切かつ迅速な
ご回答ありがとうございました。
今回のご回答できれいさっぱり理解できました。
まだまだ勉強不足ですね。(^_^;
ほんとうにありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- 英語 you have the idea of all sentence 5 2022/11/12 09:18
- 英語 英英辞典では、is used to doが、よく使われますが、is used for doingの表 11 2022/08/06 07:36
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
- 英語 提示文の"done"と"taken"の意味の違いについて 3 2022/03/22 14:28
- 英語 ポーランドの通貨の翻訳 3 2023/08/13 23:49
- 英語 The words below are adjectives or nouns. 5 2022/05/14 18:45
- 物理学 ギザギザしたエネルギー 1 2022/08/29 18:22
- 英語 I play the sentence a little faster until I can ke 3 2022/04/17 21:53
- TOEFL・TOEIC・英語検定 英文法の説明 1 2022/09/09 16:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl の外部モジュールの利用方法
-
ファイルアイコンの左下に緑の□...
-
perlのプログラミング 部分入れ...
-
ペプシコーラとコカ・コーラとD...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
Blenderについて
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
秀丸での一括変換について
-
英数文字列のうちの数値を4桁に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報