3
#!/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那里编写命令)然后调用该子程序?我不能像在上面的代码中那样直接输入命令吗?

4

1 回答 1

2

您需要指定一个代码引用 - 一个回调 - 将在按下按钮时执行,所以是的,您应该将系统调用放在sub { }.

您所写的是在定义 Button 时对 system() 的调用,因此您将 system() 的返回值指定为回调的 coderef - 这是行不通的。system() 函数将在定义 Button 时调用,而不是在按下时调用 - 这不是您想要的。

于 2011-08-12T18:22:02.713 回答