in reply to trouble with glob

The problem is that each time you do this

-e <"$INTERIORNAME"*.pdf>

it returns a different filename and only a single filename. You need to assign that glob to an array and then grep for the pdf extension with a regex.

By the way according to the 3rd edition of Programming Perl from 2000 this is referred to as the old way to do it. They recommend something like this:

@files = glob("*.pdf");

Replies are listed 'Best First'.
Re^2: trouble with glob
by kurt2439 (Sexton) on Dec 03, 2010 at 19:36 UTC

    But whenever I get my results returned by glob like this, they are broken up into different array elements by the spaces in the directories. So for instance:

    @SEARCH_FOR_TIFS = glob("$FOLDERNAME*.tif"); print $SEARCH_FOR_TIFS[0];
    Return
    Element 0: /local/Macintosh/COVERS Element 1: archive/A-E/Eye Element 2: of Element 3: Element 4:

    And part of the data disappears (element 3 and 4 should not be empty if it was splitting on the white space).

    What am I doing wrong here? I looked through File::Glob but don't see how to change globs behavior. I see the arguments to glob will be interpreted as different search queries if separated by white space but that is not applicable here. This wasn't a problem when I was store the glob results in scalar, but that obviously wasn't the right strategy either since I was only getting one of the results.

      I tried a simplified version of what you had before and it works every time on my XP laptop. Found in Programming Perl that it is supposed to return false (only once) when it gets to the end of the matching files and then start over. At least you now have an array of what the glob is doing. I couldn't get the glob to work with $FOLDERNAME in the glob but with the path spelled out it worked fine. The book mentioned something about only one level of interpreting variable but I didn't quite get it.

        Thanks for your help. I could never get it to work quite right and ended up using opendir/readdir to iterate through the files in the directory and look for the ones I was after. I know there is probably a more efficient way of doing this, but it worked for me for now. Perhaps if I looked at glob() with fresh eyes I would understand what I was going wrong. Encouraging that it worked for you, but perhaps Windows is more lenient with spaces in the path names then LINUX is (well we KNOW that is true, but not sure about how perl sees the matter).

        opendir(DIR,"$FOLDERNAME") or die $!; #Look through the tiffs for one we care about while ( $FILE = readdir(DIR)) { #check for tif's in folder starting with at least 3 nu +mbers since they have the ISBN in it if ( $FILE =~ /^[0-9][0-9][0-9].*\.tif/ ) { $FILE =~ s/([0-9]*).*/$1/; print $BOOKNAME."'s ISBN is: ".$FILE."\n"; }
Re^2: trouble with glob
by Gulliver (Monk) on Dec 03, 2010 at 15:10 UTC
    Actually just check the size of @files, no grep needed.