Re: testing for a file type

2007-12-20 Thread Chas. Owens
On Dec 19, 2007 7:01 PM, Jenda Krynicky [EMAIL PROTECTED] wrote:
snip
 I did not install it yet so I can't check but I think you have it
 wrong. According to the docs you point to

@ARGV ~~ /\.mdb\z/

 is equivalent to

grep /\.mdb\z/, @ARGV

 which is true whenever at least one item in the array matches the
 regexp.
snip

Yeah, I jumped the gun.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




Re: testing for a file type

2007-12-19 Thread Chas. Owens
On Dec 18, 2007 4:49 PM, Rob Dixon [EMAIL PROTECTED] wrote:
snip
 if (grep { not /\.mdb\z/ } @ARGV) {
print All parameters must be MDB files\n;
exit;
 }
snip

Or in Perl 5.10, coming to stores near you soon*, you can use the
smart match operator:

@ARGV ~~ /\.mdb\z/
or die All parameters must be MDB files

See smart matching in perldoc perlsyn or
http://search.cpan.org/dist/perl/pod/perlsyn.pod#Smart_matching_in_detail

* I just checked and in fact it was released yesterday.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




Re: testing for a file type

2007-12-19 Thread Jenda Krynicky
From: Chas. Owens [EMAIL PROTECTED]
 On Dec 18, 2007 4:49 PM, Rob Dixon [EMAIL PROTECTED] wrote:
 snip
  if (grep { not /\.mdb\z/ } @ARGV) {
 print All parameters must be MDB files\n;
 exit;
  }
 snip
 
 Or in Perl 5.10, coming to stores near you soon*, you can use the
 smart match operator:
 
 @ARGV ~~ /\.mdb\z/
 or die All parameters must be MDB files
 
 See smart matching in perldoc perlsyn or
 http://search.cpan.org/dist/perl/pod/perlsyn.pod#Smart_matching_in_detail
 
 * I just checked and in fact it was released yesterday.

I did not install it yet so I can't check but I think you have it 
wrong. According to the docs you point to

   @ARGV ~~ /\.mdb\z/

is equivalent to

   grep /\.mdb\z/, @ARGV

which is true whenever at least one item in the array matches the 
regexp. So it would be

 @ARGV ~~ /\.mdb\z/
 or die At least one of the parameters must be an MDB file;

Probably not what Rob (or whoever posted the original post) intended.

   grep {not condition} @ARRAY 

 is not equivalent to

   not grep {condition} @ARRAY 

not even in boolean context.


   @ARGV ~~ /\.mdb\z/
is
   any(@ARGV) =~ /\.mdb\z/
not
   all(@ARGV) =~ /\.mdb\z/

I think there should have been a !~~ operator as well.

Jenda
= [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




testing for a file type

2007-12-18 Thread goldtech
Hi,

If I have:

...
foreach (@ARGV) {
print do something only to .mdb files;
}

I could use File::Basename's fileparse and test for the file extension
and put a big if statement around or in the foreach loop. So if a user
puts a non .mdb file argument on the cmd line it won't process and
prints a usage.

But I suspect in perl theres a more compact way of doing that?

Thanks.


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




Re: testing for a file type

2007-12-18 Thread Ankur Gupta
On Dec 18, 2007 10:08 PM, goldtech [EMAIL PROTECTED] wrote:

 Hi,

 If I have:

 ...
 foreach (@ARGV) {
print do something only to .mdb files;
 }

 I could use File::Basename's fileparse and test for the file extension
 and put a big if statement around or in the foreach loop. So if a user
 puts a non .mdb file argument on the cmd line it won't process and
 prints a usage.

 But I suspect in perl theres a more compact way of doing that?

I don't think you need to use File::Basename.

You can simply do this.

foreach my $file (@ARGV) {
if ( $file !~ /\.mdb$/ ) {
print $file is not a mdb file. Ignoring...\n;
next;
}

# code to pocess .mdb file
...
...
}

-- 
Ankur

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/




Re: testing for a file type

2007-12-18 Thread Rob Dixon

goldtech wrote:

Hi,

If I have:

...
foreach (@ARGV) {
print do something only to .mdb files;
}

I could use File::Basename's fileparse and test for the file extension
and put a big if statement around or in the foreach loop. So if a user
puts a non .mdb file argument on the cmd line it won't process and
prints a usage.

But I suspect in perl theres a more compact way of doing that?


use strict;
use warnings;

if (grep { not /\.mdb\z/ } @ARGV) {
  print All parameters must be MDB files\n;
  exit;
}

foreach (@ARGV) {
  print do something only to .mdb files;
}

HTH,

Rob

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/