首页 > 解决方案 > 在 perl 中打包数组会导致“无法定位方法”错误

问题描述

我正在尝试使用 Tk 和 Archive::Tar 在 perl 中创建一个基本的 GUI 备份系统。没什么复杂的,只是制作 .tar.bz2 文件的前端。因此,Archive::Tar 命令的参数之一是数组。为了确定要放入该数组中的内容,我需要从 Tk 中包含的输入框中接收信息。但是,该程序无法编译,并在打包条目的行产生“无法定位方法”错误。

以下是一个示例(确保已安装软件包!):

use strict; use warnings;

use Tk;

my $mw = MainWindow -> new;

@filelist = $mw -> Entry( -width = 30 );
@filelist -> pack;

如何修改此代码以创建所需的效果?

标签: perltk

解决方案


Entry方法返回单个对象。你可以在这里找到它的文档。

@filelist是一个数组。您不能在数组上调用方法,只能在标量上调用。

标准方法是使用Tk::getOpenFile小部件:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use Tk;

my $mw = MainWindow->new;
my $button = $mw->Button(
    -text => 'Select Files',
    -command => sub {
        my $files = $mw->getOpenFile(-multiple => 1);
        say for @$files;
    },
)->pack;

MainLoop();

推荐阅读