Упаковка массива вызывает ошибку «Не удается найти метод» в perl - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь создать базовую систему резервного копирования с графическим интерфейсом в Perl, используя Tk и Archive :: Tar. Ничего сложного, только интерфейс для создания файлов .tar.bz2. Итак, один из аргументов команды Archive :: Tar - это массив. Чтобы определить, что нужно поместить в этот массив, мне нужно получить информацию из поля ввода, которое я включил в Tk. Однако программа не компилируется и выдает ошибку «Cannot locate method» в строке, в которую упакована запись.

Ниже приведен пример (убедитесь, что пакеты установлены!):

use strict; use warnings;

use Tk;

my $mw = MainWindow -> new;

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

Как я могу изменить этот код для создания желаемого эффекта?

1 Ответ

2 голосов
/ 30 июня 2019

Метод 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...