regex - bsd_glob behaving differently on different machines -


i using bsd_glob list of files matching regular expression file path. perl utility working on rhel, not on suse 11/aix/solarix, exact same set of files , same regular expression. googled limitations of bsd_glob, couldn't find information. can point what's wrong?

below regular expression file path searching for:

/datafiles/data_one/level_one/*/data* 

i need files beginning data, in directory present under 'level_one'.
works on rhel box, not on other unix , suse linux.

below code snipped using bsd_glob

foreach $file (bsd_glob ( "$filename", glob_err )) {     if ($filename =~ /[[:alnum:]]\*\/\*$/) {         next if -d $file;         $filelist{$file} = $permissions;         $total++;     }        elsif ($filename =~ /[[:alnum:]]\*$/) {         $filelist{$file} = $permissions;         $total++;     }        else {         $filelist{$file} = $permissions;         $total++;     }    } 

in case facing issue, /datafiles/data_one/level_one/*/data* being passed bsd_glob. creating map ($filelist) of files returned bsd_glob based on regular expression passing it. $permissions predefined value.

any appreciated.

the problem here looks you're confusing glob patterns , regular expressions.

/[[:alnum:]]\*\/\*$/ /[[:alnum:]]\*$/ 

you're looking file called * that, under directory containing literal *.

whilst technically possible it's strange. , cannot ever match patterns glob should find.

do perhaps mean:

m,\w+.*/.*$,  

(different delimiter clarity)

also - why using bsd_glob specifically? file::glob:

since v5.6.0, perl's core::glob() implemented in terms of bsd_glob(). note don't share same prototype--core::glob() accepts single argument. due historical reasons, core::glob() split argument on whitespace, treating multiple patterns, whereas bsd_glob() considers them 1 pattern. see :bsd_glob under exports, below.

comment:

i used bsd_glob instead of glob there slight difference in way works on different unix platforms. specifically, above mentioned pattern, on unix platforms, didn't return file having exact name 'data', , returned files appended data.

i'm little surprised @ that, should implementing same mechanisms , same posix standard on globbing. there chance there's permissions related problem instead?

but otherwise perhaps try not using glob heavy lifting, , instead compare file name bunch of regular expressions. (although note - res have different syntax)

foreach $file ( glob('/datafiles/data_one/level_one/*/*') ) {     next unless $filename =~ m,data\w+$,; } 

Comments

Popular posts from this blog

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -