• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:-M と (stat())[10] について)

-M と (stat())[10] について

このQ&Aのポイント
  • 開発環境と実行環境で、-M と (stat())[10] の値が異なる現象が発生しています。
  • 開発環境では、特定のフォルダ内のファイルをまとめて取得し、ソートを行っています。
  • ソートの記述では、-M を使用してファイルの更新日時を比較していますが、実行環境では正しい値が得られていません。

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

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

statが失敗していれば空リストを返すはずですから、そのときのエラーを確認すると何かわかるかもしれません。 my @list = stat $file; if($#list < 0) { warn "$!"; } あとは、CGIではなくてターミナルからやると、何故か上手くいくとか

jelfe
質問者

お礼

やっと解決しました。 原因はパスでした。 いろいろなディレクトリを読み取って、パスをパズル(?)のように合体させながら作っていたのですが、 ./aaa/bbb./ccc./AAA.txt ./aaa/bbb/ccc/AAA.txt 上記のパスだと windowsはOK。UNIXはダメ。perlは(たとえUNIXでも)OK。となるようです。 ですので、上記をUNIXのperlでオープンした場合は、perlの解釈でパスを開くのでOKですが、 完全にOS依存のファイルテスト演算子で検査すると、認識してくれない模様です。 下記のパスだと、どんな環境でもOKになるようです。 ---------------- めんどくさいんで軽くしか調べてないから以下は違うかもしれませんが、 たぶんこうゆうことです。 UNIXは、/ と ヌル の二つ以外の全ての文字をファイル名として認める。 windowsは、怪しい文字は全てファイル名として認めない。 と言うことは、. があった場合UNIXはファイル名の一部として解釈する。 windowsの場合は、パス位置を指ししめす記号(今居るディレクトリそのまま)として解釈する。 perlの場合は、一度OSの解釈でパスを開き、存在しなかった場合は別の解釈でもファイルを調べてみる。 ----------------- プログラム内で色々な要素から積み木のようにパスを組み立てて作った場合、 一番最後に正規表現にでもかけて、パス名のいらない部分をまとめて削除してキレイにしないとダメってことですね! しっかし、perlにはopenとファイルテスト演算子の仕様を同じにしてほしかった。

その他の回答 (1)

回答No.1

ファイルパスは表示されているかもしれなが、そのファイルにアクセス権がない? ファルテスト演算子の -f や -r でファイルが見えるか確認したらどうですか?

jelfe
質問者

お礼

ありがとうございます。 openで開けてたのでその辺のチェック気にしてませんでした。 ファイルテスト演算子 → ダメ。 open → 開く アクセス権 → 644 (rw-r--r--) 一体どうゆうことでしょう。 頭痛ががww まだいろいろテスト中なのでしばらく頑張ってみます

関連するQ&A