如何在IO :: Handle中保存文件?

时间:2014-06-13 16:18:46

标签: perl

我对如何保存IO :: Handle文件感到有些困惑。

这就是我所拥有的

    use IO::File;
    my $iof = IO::File->new;

    # open file
    $iof->open($path, "w") || die "$! : $path";  

    # ensure binary
    $iof->binmode;

    # output file to disk
    print $iof $self->File_Upload;
    $iof->close;

File_Upload是通过CGI模块提供给我的IO :: Handle,用于文件上传,但文件中的输出是......

IO::Handle=GLOB(0x20dabec)

不是上传的PDF的二进制数据。

如果文件句柄中有文件,如何保存?

如果我有IO :: Handle,我需要IO :: File吗?

感谢您的意见。

1DMF

2 个答案:

答案 0 :(得分:1)

使用readline

CGI提供的文件句柄中读取
print $iof readline($self->File_Upload);

您的输出内容为'IO::Handle=GLOB(0x20dabec)'这一事实暗示$self->File_Upload属于IO::Handle类型,因此应予以对待。

在列表上下文中使用readline会拉出所有行,如上所示。或者,您可以使用对象方法->getlines()

print $iof $self->File_Upload->getlines();

答案 1 :(得分:1)

如何啜饮文件?

my $fh = $self->File_Upload();
my $file = do { local $/; <$fh> };

是的,除了通常的globs(STDIN),对globs(来自open my $fh, ...)和IO scalars(*STDIN{IO})的引用之外,这适用于IO :: Handle对象。 / p>

然后打印出来,

print($iof $file);

在这种特殊情况下,您可以简单地使用

print($iof $self->File_Upload()->getlines());
相关问题