
No.5ベストアンサー
- 回答日時:
>なぜ上の階層で実行しているのでしょうか??
実行の仕方で異なるのかもしれませんね。
私も#4の方の言われるようにカレントディレクトリが想定しているものと違っているのだと思います。
use Cwd;
print getcwd;
というようなコードを実行することで
現在のカレントディレクトリを知ることができます。
ワークディレクトリで作業しなければならないということがあらかじめ決まっているなら
また、起動する時に
-x オプションでパスを指定することで、
指定したパスに移動してから、スクリプトを実行することができます。
また、プログラムが起動してからは、
chdir "パス";
で指定したディレクトリに移動します。
こういうことをしてから実行するのが良いかも知れませんね

No.4
- 回答日時:
>実行ファイルは「ファイル.txt」と同じディレクトリにあるのに、なぜ上の階層で実行しているのでしょうか??
>もし分かったら教えてください。
perlを実行するときに、カレントディレクトリ(unixの場合はワーキングディレクトリ)という概念があります。これは、今、どのディレクトリに自分がいるかということを示します。実行ファイル=スクリプトファイル(もしくはperl.exe本体)のことを言っているのかと思いますが、perlの実行時、ワーキングディレクトリは、必ずしも、実行ファイルの存在するところと一致しません。(とうよりは、通常一致しません)それは、perl本体を起動する親プロセスのワーキングディレクトリが今、どこにあるかによって決まります。通常、子プロセス(=perl.exeが実行されているプロセス)は、親プロセスのワーキングディレクトリを引き継ぎますので。(但し、明示的にどのワーキングディレクトリでperlを実行するかを指定することも出来ます)
親プロセスは、webサーバなどの場合は、アパッチかと思いますので、そちらの設定で、ワーキングディレクトリが決まるかと思います。
perlが今、どのディレクトリで動いているかを確認するには、
system("pwd"); ・・・UNIX
system("cd"); ・・・windows
として下さい。これで、自分のいるディレクトリがわかります。
No.3
- 回答日時:
>なぜか一つ上の階層を見ているようです。
それは、ひとつ上の階層で実行しているということだと思いますけど・・
>の$fileにはパス+ファイル名を指定することはできないのですか??
もちろんできますよ。
例えば、
#2>のプログラムで
glob("../*.*");
でも実行できます
glob("./*.*");
#.は今いるフォルダの意味
で、1つ上の階層のファイルが表示されるなら
今実行されているのがやはり、想定しているより上の階層にいるのだと思います
ありがとうございます。
$fileにはパスも書くことにしました。
そしたら正常に動くようになりました。
実行ファイルは「ファイル.txt」と同じディレクトリにあるのに、なぜ上の階層で実行しているのでしょうか??
もし分かったら教えてください。
No.2
- 回答日時:
例えば、同じフォルダ内で以下の様なスクリプトを実行したら結果はどうなりますか?
test.pl
--------------------------------------
@files=glob("*.*");
for(@files){
printf "%s:%s\n", $_, -e $_;
}
--------------------------------------
そのフォルダ内のファイルが
ファイル.txt:1
の様に表示されるはずですが
この回答への補足
ファイル.txt:1
と表示されませんでした。
なぜか一つ上の階層を見ているようです。
なぜ同じ階層のファイルを見てくれないのでしょう?
if(-e $file)
の$fileにはパス+ファイル名を指定することはできないのですか??
何度もすみません。。。
お願いいたします。
補足なんですが、このプログラムを呼び出しているプログラムも、一つ上の階層を見ていました。
物理的にはすべて「ファイル.txt」と同じディレクトリにあります。
実行するディレクトリが変更されることってあるのですか?
No.1
- 回答日時:
プログラム自体は、問題ありません。
他の部分に問題があるのだと思います。
これだけの、プログラムだと
$file にちゃんとファイル名が設定されているか
本当にその時実行されているディレクトリにそのファイル名があるかないか
ぐらいしか問題点ってないと思います。
この回答への補足
ご回答ありがとうございます。
確認しましたが、
$fileにはif文の前に「ファイル.txt」という値が入っています。
また、このプログラムと同じディレクトリに「ファイル.txt」は存在します。
if(-e "ファイル.txt"){
と書いてもif文の中に入りません。。。
他の部分に問題があるとすれば、どのようなことがありえますか??
他は正常に動作しているのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
INDIRECT 横に再度抽出したい
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl-CGI で排他制御はどうすれ...
-
perlのローカルプログラムでデ...
-
cookieを必要とするページへのLWP
-
MacOSXでのPerlプログラミング
-
perlからのexcel読み込み
-
unlink 、renameが使えない理由
-
コマンドプロンプトからperlを...
-
エラーログ「\\x8ew\\x92\\xe8...
-
無料配布の郵便番号自動入力cgi...
-
perlが突然動かなくなりました
-
あるURLがファイルなのかディレ...
-
Perl で ディレクトリ及びサブ...
-
標準入出力 パイプ
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
-
where can I buy snowbord in t...
おすすめ情報