Выполнение команд с помощью виджета Button в Perl-Tk - PullRequest
3 голосов
/ 12 августа 2011
#!/usr/local/bin/perl
use Tk;
# Main Window
$mw = new MainWindow;
$label = $mw -> Label(-text=>"Hello World") -> pack();
$button = $mw -> Button(-text => "Quit",
                -command => sub { exit }) -> pack();
MainLoop;

В этом коде при нажатии кнопки $button программа закрывается.Потому что он выполняет команду выхода.Я хочу изменить код так, чтобы, когда пользователь нажимал на кнопку, он сбрасывал правило iptables (iptables -F).Как я могу это сделать?

Я пробовал это:

$button = $mw -> Button(-text => "Flush the rules",
                    -command => system ( iptables -F )) -> pack();

Почему это не работает?Должен ли я создать для него подпрограмму (затем написать туда команду iptables -F), а затем вызвать эту подпрограмму?Разве я не могу поставить команду напрямую, как в коде выше?

1 Ответ

2 голосов
/ 12 августа 2011

Вам необходимо указать ссылку на код - обратный вызов, который будет выполняться при нажатии кнопки, поэтому да, вы должны поместить системный вызов в sub { }.

.вызов system () в тот момент, когда определена кнопка, поэтому вы указываете возвращаемое значение из system () в качестве coderef для обратного вызова - что не сработает.Функция system () будет вызываться, когда определена кнопка, а не когда она нажата - а это не то, что вам нужно.

...