FAQ
# New Ticket Created by "David Shivak"
# Please include the string: [perl #20904]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=20904 >


Summary: glob returns initial argument string, only if no wildcards are
present in the glob argument. It happens in both scalar and list return
context.

TEST CODE:
use Data::Dumper; use strict;

my $noWildcard = "this_file_does_not_exist";
my $withWildcard = "file_does_not_exist_with_wildcard*";

globtest($noWildcard);
globtest($withWildcard);


sub globtest
{
my $filename = shift;
die if (-f $filename);
print "Testing glob using string '$filename'\n";
my @array = glob($filename);
my $scalarvar = glob($filename);
print Dumper(\@array);
print Dumper(\$scalarvar);
}

OUTPUT:
Testing glob using string 'this_file_does_not_exist'
$VAR1 = [
'this_file_does_not_exist'
];
$VAR1 = \'this_file_does_not_exist';
Testing glob using string 'file_does_not_exist_with_wildcard*'
$VAR1 = [];
$VAR1 = \undef;


PERL VERSION:
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
Platform:
osname=solaris, osvers=2.8, archname=sun4-solaris
uname='-----------'
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-fno-strict-aliasing -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
optimize='-O',
cppflags='-fno-strict-aliasing'
ccversion='', gccversion='3.2', gccosandvers='solaris2.8'
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib '
libpth=/usr/local/lib /usr/lib /usr/ccs/lib
libs=-lsocket -lnsl -lgdbm -ldb -ldl -lm -lc
perllibs=-lsocket -lnsl -ldl -lm -lc
libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-fPIC', lddlflags='-G -L/usr/local/lib'

Characteristics of this binary (from libperl):
Compile-time options: USE_LARGE_FILES
Built under solaris
Compiled at Dec 11 2002 14:42:03
@INC:
/share/usr/local/lib/perl5/5.8.0/sun4-solaris
/share/usr/local/lib/perl5/5.8.0
/share/usr/local/lib/perl5/site_perl/5.8.0/sun4-solaris
/share/usr/local/lib/perl5/site_perl/5.8.0
/share/usr/local/lib/perl5/site_perl/5.6.0
/share/usr/local/lib/perl5/site_perl

Search Discussions

  • Hv at Feb 13, 2003 at 3:44 am
    "David Shivak" (via RT) wrote:
    :Summary: glob returns initial argument string, only if no wildcards are
    :present in the glob argument. It happens in both scalar and list return
    :context.

    I think the problem here is one of documentation: `perldoc -f glob`
    refers one to File::Glob which says that:
    Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob().
    .. but doesn't how it calls it. In fact, it calls the (undocumented)
    File::Glob::csh_glob() instead, which does the extra argument parsing
    described before calling the same internal routine as bsd_glob().

    You are probably best off calling File::Glob::bsd_glob() directly,
    with the particular set of flags appropriate to your needs.

    An alternative is to load File::Glob and set $File::Glob::DEFAULT_FLAGS
    (also undocumented, I'm afraid) to your preferred set of GLOB_* flags,
    and then use glob() in the usual way.

    As far as I can see, the results you are seeing are as expected for
    the default settings (GLOB_CSH along with GLOB_NOCASE on certain
    systems, for historical reasons of csh compatibility).

    Volunteers to improve the documentation are always welcome. :)

    Hugo
  • David Shivak at Feb 13, 2003 at 6:15 pm

    An alternative is to load File::Glob and set
    $File::Glob::DEFAULT_FLAGS
    (also undocumented, I'm afraid) to your preferred set of GLOB_* flags,
    and then use glob() in the usual way.

    As far as I can see, the results you are seeing are as expected for
    the default settings (GLOB_CSH along with GLOB_NOCASE on certain
    systems, for historical reasons of csh compatibility).

    Volunteers to improve the documentation are always welcome. :)

    Hugo
    Thanks for the informative and comprehensive reply! I'll take a look at
    the documentation contribution process; if you have a direct hyperlink
    to the cvs that would be appreciated. I agree, documentation is the
    best place to address the expected but non-obvious output ;).

    Dave Shivak

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupperl5-porters @
categoriesperl
postedFeb 13, '03 at 3:05a
activeFeb 13, '03 at 6:15p
posts3
users3
websiteperl.org

3 users in discussion

Hv: 1 post David Shivak: 1 post David Shivak: 1 post

People

Translate

site design / logo © 2021 Grokbase