こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

よろしくお願いします。

投稿日時 - 2006-12-28 13:28:01

QNo.2630598

すぐに回答ほしいです

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

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

print(FILE $files);

これは

print(FILE $file);

これですね。
これでファイル出力ができると思います。

投稿日時 - 2006-12-29 08:36:53

お礼

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

ありがとうございます。

投稿日時 - 2006-12-29 19:35:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

余談ですが、括弧は余り付けないほうが見やすいですよ。

投稿日時 - 2006-12-29 00:47:35

お礼

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

投稿日時 - 2006-12-29 19:36:15

あなたにオススメの質問