Question

I am working on a perl script which does a document inventory for pdfs in all directories starting from some root directory on our network. The script runs fine locally, but I can't get it to read files from the network drive. i have strawberryperl

this is the beginning of my code

use strict;
use Excel::Writer::XLSX;
use Cwd;
use Tk;
use File::Find;

my @analystreports;
my @directories;

I used the Tk Gui to get a directory

my $homeDir  = Tk::MainWindow->new->chooseDirectory;

capture all files and folders in current directory

find(\&grabPDF, $homeDir);

sub grabPDF {

    my $file = $_;
    if ($file =~ /\.pdf/g) {

        push @analystreports, $File::Find::name;
    }
}

my network drive looks like this in net use

Local N: Remote \abc-file-01\shared data

Please excuse my beginner code. My question is whether I'm doing something wrong with a network drive or if I have to ask our administrator for privileges. Thanks a ton, Dan

Was it helpful?

Solution

A drive is a drive. You can either pass any of the following strings:

N:\
n:\
N:/
n:/

You could even pass the UNC name.

\\abc-file-01\shared data
//abc-file-01/shared data

Of course, you might have to use some escaping to build the string.

"N:\\"
"N:/"
"n:\\"
"n:/"
"\\\\abc-file-01\\shared data"
"//abc-file-01/shared data"

But that's probably not relevant since you appear to be getting the string from Tk rather than building it.

There's a bug in your code.

if ($file =~ /\.pdf/g) {

should be

if ($file =~ /\.pdf/) {

and probably

if ($file =~ /\.pdf\z/) {

The g makes no sense there and can cause problems (although I think your specific code doesn't suffer). Get rid of the g.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top