9.2 副程式傳參考

許多情況下,副程式或函式需要傳遞參考進去,比如:File::Find 模組中的 find 這個方法:

#! /usr/bin/perl

use File::Find;
$index=1;

# 路徑設定
my $dir=shift || '/home/ols3';

my $tmp="dirlist.txt";

# 開啟記錄暫存檔
open(W, "> $tmp") || die "$!\n";

# 走訪該目錄,注意!!! 此處傳入一個回呼副程式 doit 的參考:\&doit
find(\&doit, $dir);

close(W);


# 動作區
sub doit {
	print_process_status($index);
	print W "$File::Find::name\n";
	$index++;
}

sub print_process_status {
    my $i=shift;
    my $j = $i % 4;
    SWITCH : {
	$j == 0 && do { print STDERR " (|)\r";  last SWITCH; };
	$j == 1 && do { print STDERR " (/)\r";  last SWITCH; };
	$j == 2 && do { print STDERR " (-)\r";  last SWITCH; };
	$j == 3 && do { print STDERR " (\\)\r"; last SWITCH; };
    }
}