思考程式的方式--Higher-Order Perl
這段程式碼很有意思,事實上我們常常在寫程式時創造一些可重複使用的架構,但是怎麼做會更靈活?<br /><br />ps. 程式碼哉自Higer-Order Perl<br /><br />這程式是一個 list 目錄-檔案的 遞迴程式,通常我們寫完了以後,會希望從這個結構擴充,而下面程<br />式碼中的 $code->($top); 正是可以由外部擴充邏輯的地方(callback)<br />sub dir_walk { <br />my ($top, $code) = @_; <br />my $DIR;<br />$code->($top);<br />if (-d $top) {<br />my $file;<br />unless (opendir $DIR, $top) {<br />warn "Couldn’t open directory $top: $!; skipping.\n";<br />return;<br />}<br />while ($file = readdir $DIR) {<br />next if $file eq '.' || $file eq '..';<br />dir_walk("$top/$file", $code);<br />}<br />}<br />}<br /> <br />sub print_dir {<br />print $_[0], "\n";<br />}<br /><br />dir_walk('.', \&print_dir );<br /><br />在這裡我們看到,程式原始的架構是list 目錄-檔案 , 但是我們可以傳給function 2個參數<br />1 起始路徑 2 function , 恩! 這看起來有濃濃的 functional 的味道,不是嗎?