http://qs321.pair.com?node_id=161924

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; last; } } $target; }; if( $target ) { open IN, $target or die "Cannot open $target for input: $\n"; # ... } else { die "Can't find $target.\n"; }