Description: This snippet searches a series of directories for a file. For instance, you may want to open the file 'foo.txt', but it could be in any one of a number of directories, so you want to search them one after the other until you find it.

An analogy would be the way a shell finds a program based on the value of the PATH environment variable.

asdfgroup's remarks noted.

    my $target = 'foo.txt';
    my $file = do {
        my $target = undef;
        foreach my $dir( qw{ /tmp /var/tmp /foo /bar } ) {
            my $t = "$dir/$target";
            # nb: you might want to use -e here
            # but -f might be what you *really* want, YMMV
            if( -f $t ) {
                $target = $t;

    if( $target ) {
        open IN, $target or die "Cannot open $target for input: $\n";
        # ...
    else {
        die "Can't find $target.\n";