Perlでディレクトリ内の各ファイルを再帰的に処理する関数

あるディレクトリ内を再帰的に処理し、その結果を変数の中に詰め込む関数を作ってみました。

sub recursive {
    my ( $base_dir, $result, $function ) = @_;
    my( @files );
 
    @files = glob( $base_dir.'/*' );
 
    for my $file_name ( @files ){
        if ( -d $file_name ){
            # process recursively
            recursive( $file_name, $result, $function );
        } elsif ( -f $file_name ){
            # process file
            $result = &$function($file_name,$result);
        }
    }
}
こんな感じで使えます。
package Hoo;
use strict;

sub recursive {
    my ( $base_dir, $result, $function ) = @_;
    my( @files );
 
    @files = glob( $base_dir.'/*' );
 
    for my $file_name ( @files ){
        if ( -d $file_name ){
            # process recursively
            recursive( $file_name, $result, $function );
        } elsif ( -f $file_name ){
            # process file
            $result = &$function($file_name,$result);
        }
    }
}

package Foo;

my $result = [];
my $func = sub {
    my ($file_name,$result) = @_;
    push @$result, "$file_name!!\n";
    return $result;
};

# Users/myself/hogeの下に1.txt, 2.txt, 3/1.txtというファイルがあったと仮定
Hoo::recursive("/Users/myself/hoge",$result, $func);

print $_ for @$result;

# /Users/myself/hoge/1.txt!!
# /Users/myself/hoge/2.txt!!
# /Users/myself/hoge/3/1.txt!!