#!/usr/bin/perl use warnings; use strict; my $dir; if(!($dir = $ARGV[0]) || !(-d $dir) || !(-x $dir)) { die "Usage: readable_directory\n"; } opendir(my $dh,$dir) or die "Couldn't open $dir"; my @scripts; EXAMINEFILES: while (my $file = readdir($dh)) { if (!(-f $file)) { next EXAMINEFILES; } if ($file =~ m/\.sh$/) { push @scripts,$file; next EXAMINEFILES; } open(my $fh,"<",$file) or die "Couldn't open file $file for reading"; my $firstline = (<$fh>); if ($firstline && $firstline =~ m{^\#\!/usr/local/bin/perl}) { push @scripts,$file; } close $fh or die "Couldn't close file $file"; } closedir $dh or die "Couldn't close directory handle"; print "Found the following scripts in $dir:\n"; print join("\n",@scripts)."\n";