- ベストアンサー
CGI.pmで取得したファイルハンドルを変数にいれるとファイル名のみになる・・・
perlにて、 use CGI; my $q = new CGI; my $ufh = $q->upload('file'); などで$ufhにファイルハンドルを受け取り、 この直後で、アップロードなどを行うと正常に行われるのですが、 別の関数に渡してからアップロードを行うとファイル名がついた0バイトのファイルがアップロードされます。 &test($ufh); test($){ $filename = $_[0]; while(read($filename , $buffer, 1024)){ $file .=$buffer; } my $basename; my $exp; my $files; my $newfile; my @files = split(/\\/, $file_name); ($basename, $exp) = split(/\./, $files[-1]); $newfile = $basename . "." . $exp; open(FILE, "> /tmp/$newfile"); binmode(FILE); print(FILE $files); close(FILE); } ファイルハンドルを変数に格納して持ちまわすことはできないのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
この場合は単にスペルミスだと思われます。 print(FILE $files); これは print(FILE $file); これですね。 これでファイル出力ができると思います。
その他の回答 (1)
- guci-ok
- ベストアンサー率33% (49/146)
「use strict;」は付けていますか? コンパイルエラーが一杯でてますよ。 D:\>perl -wc test.pl Global symbol "$filename" requires explicit package name at test.pl line 3. Global symbol "$filename" requires explicit package name at test.pl line 4. Global symbol "$buffer" requires explicit package name at test.pl line 4. Global symbol "$file" requires explicit package name at test.pl line 5. Global symbol "$buffer" requires explicit package name at test.pl line 5. Global symbol "$file_name" requires explicit package name at test.pl line 11. test.pl had compilation errors. 余談ですが、括弧は余り付けないほうが見やすいですよ。
お礼
ありがとうございます。 もう少しチェックするべきでした・・・
お礼
単純ミスでした・・・ 大変失礼しました。 ありがとうございます。