• ベストアンサー
  • すぐに回答を!

CGI.pmで取得したファイルハンドルを変数にいれるとファイル名のみになる・・・

  • 質問No.2630598
  • 閲覧数353
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 84% (21/25)

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);
}

ファイルハンドルを変数に格納して持ちまわすことはできないのでしょうか?

よろしくお願いします。

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

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

ベストアンサー率 66% (70/106)

この場合は単にスペルミスだと思われます。

print(FILE $files);

これは

print(FILE $file);

これですね。
これでファイル出力ができると思います。
お礼コメント
DynamisH

お礼率 84% (21/25)

単純ミスでした・・・
大変失礼しました。

ありがとうございます。
投稿日時:2006/12/29 19:35

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 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.

余談ですが、括弧は余り付けないほうが見やすいですよ。
お礼コメント
DynamisH

お礼率 84% (21/25)

ありがとうございます。
もう少しチェックするべきでした・・・
投稿日時:2006/12/29 19:36
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ