初めて自分の家と他人の家が違う、と意識した時

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

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

よろしくお願いします。

A 回答 (2件)

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



print(FILE $files);

これは

print(FILE $file);

これですね。
これでファイル出力ができると思います。
    • good
    • 0
この回答へのお礼

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

ありがとうございます。

お礼日時:2006/12/29 19:35

「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.

余談ですが、括弧は余り付けないほうが見やすいですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
もう少しチェックするべきでした・・・

お礼日時:2006/12/29 19:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!