#!/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$button
被按下时,它closures程序。 因为它执行退出命令。 我想修改代码,这样当用户点击button时,它将刷新iptables规则( iptables -F
)。 我怎样才能做到这一点?
我试过这个:
$button = $mw -> Button(-text => "Flush the rules", -command => system ( iptables -F )) -> pack();
为什么这不起作用? 我应该为它做一个子程序(然后在那里写iptables -F
命令),然后调用这个子程序? 我不能像上面的代码那样直接input命令吗?
你需要指定一个代码引用 – 一个回调 – 当按钮被按下时,这个回调将被执行,所以是的,你应该把你的系统调用放在一个sub { }
。
你写的是在定义Button的时候调用system(),所以你需要指定system()的返回值作为回调的coderef–这是行不通的。 系统()函数将在Button被定义时被调用,而不是被按下时 – 这不是你想要的。