![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.5ベストアンサー
- 回答日時:
>なぜ上の階層で実行しているのでしょうか??
実行の仕方で異なるのかもしれませんね。
私も#4の方の言われるようにカレントディレクトリが想定しているものと違っているのだと思います。
use Cwd;
print getcwd;
というようなコードを実行することで
現在のカレントディレクトリを知ることができます。
ワークディレクトリで作業しなければならないということがあらかじめ決まっているなら
また、起動する時に
-x オプションでパスを指定することで、
指定したパスに移動してから、スクリプトを実行することができます。
また、プログラムが起動してからは、
chdir "パス";
で指定したディレクトリに移動します。
こういうことをしてから実行するのが良いかも知れませんね
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Visual Basic(VBA) 【VBA】For文を使用し、行をコピーして別シートに貼り付ける方法を教えてください。 4 2022/07/19 09:01
- Visual Basic(VBA) この関数と同じ処理をVBAで行うにはどうしたら良いでしょうか? これは、1列の中に同じ値が複数存在し 21 2022/07/07 07:48
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl上からfindを使い検索した...
-
エラーログ「\\x8ew\\x92\\xe8...
-
VBAで巨大なファイルの途中から...
-
VBAでCSVファイルを途中行まで...
-
教えて!perlから.exeファイル...
-
パスから最後のディレクトリだ...
-
Excelマクロでフォルダ内のCSV...
-
エクセルVBA コードが同じでも...
-
Firefox で file:// で始まる U...
-
fopen64について
-
ExcelをCSV書き出す場合のシー...
-
ページ間での変数の受け渡し
-
ListBoxのデータを高速でファイ...
-
動かなくなったのでJavaソース...
-
AutoCADのスクリプト
-
エクセルVBAで素数だけを出力す...
-
【エクセル】改行無しテキスト...
-
shellのコマンド deffの差分の...
-
全角と半角文字が混在している...
-
window.open でのファイル指定方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーログ「\\x8ew\\x92\\xe8...
-
LWPのインストール
-
unlink 、renameが使えない理由
-
readdir におけるフルパスでの...
-
perl system関数 引数 フォルダ
-
Perlファイルテスト演算子が正...
-
perl上からfindを使い検索した...
-
フルパスについてご質問します
-
初心者 Hello worldをしたい
-
Template-Toolkitのテンプレー...
-
AuthUserFile用に登録するためには
-
PerlとUnixの関係
-
perlからのexcel読み込み
-
perlのローカルプログラムでデ...
-
ファイル操作について
-
配列を使ってファイル名のリネーム
-
perlが突然動かなくなりました
-
PG全くの初心者が、C言語での作...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
おすすめ情報