Hi there,

Have a look at these two different implementations. IMPL2 works somehow. The
problem I am facing is that the glob <$pat> does not return any value in
IMPL1 but it returns in IMPL2. Can somebody tell what could be the problem.

I have also tried including the advanced glob module using

use File::Glob qw(:globally :case);

============
=== IMPL 1 ===
============

#!/usr/local/bin/perl
$long=0;
$pat="*";
if ($#ARGV>2) {
   print "Too many arguments.\nUsage: ldir [-lrh] [regexp] [dir]\n";
} elsif ($ARGV[0]=~/^-/) {
   $args=$ARGV[0]; $args=~s/^-//g;
   for ($i=0;$i<length($args);$i++) {
       $temp=substr($args,$i,1);
       if ($temp eq "r") {
           if ($#ARGV<1) {
               print "Too few arguments. Regexp expected with \"r\"
option."; exit 1;
           } elsif ($#ARGV>1) {
               $pat="$ARGV[2]/$ARGV[1]";
           } else {
               $pat="$ARGV[1]";
           }
       } elsif ($temp eq "l") {
           $long=1;
           if ($#ARGV>1) {
               "Too many arguments with \"-l\" option.\nUsage: ldir [-lrh]
[regexp] [dir]\n";
           } elsif ($#ARGV==1) {
               $pat="$ARGV[1]/*";
           }
       } elsif ($temp eq "h") {
           print "Usage: ldir [-lrh] [regexp] [dir]\n"; exit 0;
       } else {
           print "Unknown option \"$temp\"\nUsage: ldir [-lrh] [regexp]
[dir]\n"; exit 1;
       }
   }
} else {
   if ($#ARGV>0) {
       print "Too many arguments without any option.\nUsage: ldir [-lrh]
[regexp] [dir]\n"; exit 0;
   } elsif ($#ARGV==0) {
       $pat="$ARGV[0]/*";
   }
}

@dirs=<$pat>;
print "pat=$pat,[EMAIL PROTECTED]";
foreach $file (@dirs) {
   if (-d $file) {
       if (!$long) {
           @dir=split("/",$file);
           print "$dir[$#dir]\n";
       } else {
           print "$file\n";
       }
   }
}

============
=== IMPL 2 ===
============

#!/usr/local/bin/perl
use Switch;
$dummy="a";
switch ($dummy) {
    case "a" {}
}

# Rest of the implementation is same as above

$long=0;
$pat="*";

Reply via email to