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が押されるとプログラムが閉じます。exit コマンドを実行するためです。ユーザーがボタンをクリックしたときに iptables ルール ( ) をフラッシュするようにコードを変更したいと考えていますiptables -F。これどうやってするの?

私はこれを試しました:

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

なぜこれが機能しないのですか?そのためのサブルーチンを作成し(そこにiptables -Fコマンドを記述して)、そのサブルーチンを呼び出す必要がありますか?上記のコードで行ったように、コマンドを直接配置することはできませんか?

4

1 に答える 1

2

ボタンが押されたときに実行されるコード参照 (コールバック) を指定する必要があるため、システム コールをsub { }.

あなたが書いたのは、ボタンが定義されている時点での system() への呼び出しであるため、system() からの戻り値をコールバックのコードリファレンスとして指定していますが、これは機能しません。system() 関数は、ボタンが押されたときではなく、ボタンが定義されたときに呼び出されます-これはあなたが望むものではありません。

于 2011-08-12T18:22:02.713 に答える