Either learn how to use the debugger or Data::Dumper. I've modified your code to dump some values. They are not quite what you expect!
#!/usr/bin/perl -w
use Data::Dumper;
use strict;
my $dir = 'C:\Users\ZB\Desktop\Text Files';
$dir = 'c:';
opendir (DIR, $dir) or die "cannot opendir $dir";
foreach my $file (readdir(DIR))
{
warn Data::Dumper->Dump([\$file],[qw(*file)]).' ';
&process_file ($file);
}
sub process_file
{
warn Data::Dumper->Dump([\@_],[qw(*_)]).' ';
my $line = @_;
warn Data::Dumper->Dump([\$line],[qw(*line)]).' ';
my @array = split(/ /, $line);
print "$#array\n";
}
closedir (DIR);
And this produces:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:>perl opendir.pl
$file = \'.'; # This is '.'
at opendir.pl line 12.
@_ = ( # Your sub get an array containing
+'.'
'.'
);
at opendir.pl line 18.
$line = \1; # but $line is 1 (the length of @_)
+ ...
at opendir.pl line 20. # what you really wanted is my ($fi
+lename) = @_; # This is the name of the file that needs to be opened/
+read/closed
0
$file = \'..';
at opendir.pl line 12.
@_ = (
'..'
);
at opendir.pl line 18.
$line = \1;
at opendir.pl line 20.
0
$file = \'MyOpen(0).pl';
at opendir.pl line 12.
@_ = (
'MyOpen(0).pl'
);
at opendir.pl line 18.
$line = \1;
at opendir.pl line 20.
0
...
|