If I comment out the use File::Glob ':glob'; to get a run with the core glob, then put it back in, I see the following#!/usr/bin/perl -w use strict; use File::Glob ':glob'; my $dir = shift || "/etc"; my $max = shift || 10000; my $entries = 0; while (glob("$dir/*")) { last if (++$entries > $max); } print($entries, " items under $dir\n");
The first (core) run demonstrates that there are 279 entries in my /etc, and it takes almost no time to determine that. The second run, confined to stop after it is demonstrably wrong, takes quite a while to be wrong. This is consistent with it rebuilding the entire list for each iteration, then throwing away all but the last item.time globbug.pl /etc 20000 279 items under /etc real 0m0.00s user 0m0.00s sys 0m0.00s time globbug.pl /etc 280 281 items under /etc real 0m0.15s user 0m0.09s sys 0m0.06s
In reply to Re: File::Glob infinite loop with while loop unlike core glob function
by jpl
in thread File::Glob infinite loop with while loop unlike core glob function
by Gulliver
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |