みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

以下のperlのプログラムについて教えて下さい。

次のプログラムは”多くのファイルの名前を一度に変更する”です。
(参考書から持ってきました)

perlの初心者、というよりパソコンの初心者で参考書等で調べても
わからないことが多く困っています。

#! /usr/bin/perl

$op = shift or die"Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}

質問
1. opは何ですか?
2. Usageは何ですか?
3. exprは何ですか?
4. ARGVは何ですか?
5. evalは何ですか?
6. wasは何ですか?
7. eqは何ですか?
8. このプログラムにおいてファイルは
   どこのディレクトリでもリネーム出来るのでしょうか?
9. 出来ればプログラムの一行一行について説明をして下さい。

勉強不足で申し訳ありませんが、急ぎで知りたいので
宜しくお願い致します。

投稿日時 - 2002-05-05 23:31:01

QNo.264758

すぐに回答ほしいです

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

なぜ,急ぎなのですか?
> 9. 出来ればプログラムの一行一行について説明をして下さい。
急ぎなのにこれが必要な理由がちょっとわからない.

> 8. このプログラムにおいてファイルは
   どこのディレクトリでもリネーム出来るのでしょうか?

これは,試せばわかるはずです.
こんなところで聞くよりよっぽどはやいですよ.

------------------------------------------------------------
回答

以下はperlの基本です.

$から始まるものは変数名です.
@から始まるものは配列変数名です.
表示したいメッセージなど,特定の文字列は""で囲む.

質問 に対する回答

> 1. opは何ですか?
opという名前の変数.
op 自体はスクリプトの作者がかってにつけたので,
実はなんでもよい

> 2. Usageは何ですか?
”使い方”の意味の英単語.

> 3. exprは何ですか?
おそらく,何か適当な「式または表現」(expression) の意味.
一般的ではないが,コンピューター関係ではよく使われる略語.

> 4. ARGVは何ですか?
配列変数名だが,やや特殊な変数.
この場合は
@ARGV = <STDIN>
によって,キーボードなどから一行読み込み,
それが単語単位で分割され,@ARGVに代入される.

> 5. evalは何ですか?
「評価する」ためのコマンド.つまり,指定の文字列をコマンドとして実行する.
eval $op;
では,変数opに入っている文字列をコマンドとして実行する.?

> 6. wasは何ですか?
変数

> 7. eqは何ですか?
「等しい」を表す 演算子

> 8. このプログラムにおいてファイルは
   どこのディレクトリでもリネーム出来るのでしょうか?

できます.使い方は少し工夫がいるかもしれません.
ためしてみてできなかったら,
どのようなコンピューターで(Windows 98, UNIX 等),
どのように実行し,(コマンドプロンプトを開き,"rename xxxx xxxxと入力した"等)
どのような結果になったかという情報も書いてください.

> 9. 出来ればプログラムの一行一行について説明をして下さい。

#! /usr/bin/perl
実行開始時に,キーボードから入力した内容は記憶されている.


単語1 = rename
単語2= s/f/g/
単語3= f1.txt
単語4=f2.txt

$op = shift or die"Usage: rename expr [files]\n";

shift というコマンドを実行する.
実行できなかったら,
die"Usage: rename expr [files]\n"
を実行する.

shiftを実行すると,配列の内容がひとつずれる.
指定しなければ,@ARGV コマンド実行時に
キーボードから入力した内容がずらされれる.

単語1 = rename
単語2= s/f/g/
単語3= f1.txt
単語4=f2.txt

$was = $_;
 file名を変数wasに記憶しておく
eval $op;
 変数opをコマンドとして実行する.$_に対して,かなぁ
rename($was,$_) unless $was eq $_;
 変数"was"が変数"_"と 等しく なければ ファイル名を変更する.

あと,
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV)
die $@ if $@;
が残ってますが,時間がないのでこのへんで失礼します.

急ぎの理由=レポートの課題の締め切りが連休明け
かなにかでしょうか.

がんばってください.
入門書を買いましょう.買ってあるなら,読みましょう.

投稿日時 - 2002-05-06 07:45:48

お礼

有難うございました。

急ぎの理由は宿題とかじゃないんですけど、
ゆっくり勉強してる時間が無いので・・・

あと、プログラミングがうまくいったか確認できないんです・・・
”ページが見つかりません”になってしまって・・・
インストールは正常に出来たはずなのに・・・
何でですかね?

投稿日時 - 2002-05-06 08:16:44

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

使っているコンピューターのOSは何ですか?

どこにインストールして,
どのように実行して,
何にそのエラーメッセージが表示されたのですか?

投稿日時 - 2002-05-06 08:24:53

あなたにオススメの質問