Harry Putnam wrote:

I posted my effort at digging out the matches.
I see the way you did it, even though not the exact results I was
after is 100s of percent better way to write it.

I'm curious though if the overhead is different in your compact code
compared to mine. That is, if all that spinning through dir2:
,----
|   my ($r1full,$r1end);
|  while (($r1full,$r1end) = each(%r1h)) {
|    foreach my $key (keys %r2h) {
`----

is more costly than your compact example:
,----
|     if ( exists $r2h{ $rlend } ) {
|        print "$r2h{$rlend} MATCHES $r1end\n";
`----

Yes.

In other words is the perl interpreter working harder in one case?

Yes.


[...]

cat ex1.pl
#!/usr/local/bin/perl

use strict;
use warnings;
use File::Find;
use Cwd;

my $topdir2recurse = shift;

## Trying to use JKs' notation

my $cnt1 = 0;
find  sub {
        if(-f $File::Find::name){
          $cnt1++;
        }
      },$topdir2recurse;

print "Finished 1st recurse, count was <$cnt1>\n";
# ------- ------- ---=--- ------- ------- my $cnt2 = 0;
find  sub {
       my $dir = getcwd;
       if(-f $dir . '/' . $_){
          $cnt2++;
       }
      },$topdir2recurse;

print "Finished 2nd recurse, count was <$cnt2>\n";

            __END__
------- --------- ---=--- --------- -------- run ex1.pl ./dir1
  Finished 1st recurse, count was <0>
  Finished 2nd recurse, count was <625>
------- --------- ---=--- --------- -------- I'm sure my test is invalid since you've shown that $File::Find:;dir
is all I needed.  But not sure I see why it works in one case but not
this case.  (Something wrong with the example no doubt)

You need to do the -f file test on $_ instead of either $File::Find::name or getcwd() . '/' . $_ because *you* *are* *using* *relative* *paths* instead of absolute paths. File::Find::find() already changes your location to $File::Find::dir so $_ is *in* *the* *current* *directory* and there is no need to prepend anything to $_ to use a file test on it. Trying to use a file test on $File::Find::name searches for the file name *relative* to the current directory.


[...] script snipped

Yes, once I get it working... and figure out what is actually going on
in that compact code it is the kind of code I'd like to be able to
dash off (and read) some day.

I don't see (yet) what is supposed to be happening here.  There is a
lot happening that isn't obvious to me.

       $data{ $_ }{ $r2 }++
   $data{ $_ } .. (ok thats what I called the end name)
Are {} playing the role of rgx delimiters in `{ $r2 }'

What are "rgx" delimiters?

Or is it the same as saying:
   $data{ $_ } eq $r2

No.

I'm not sure what roll the `++' plays there either.

That is incrementing the value in $data{ $_ }{ $r2 }.




John
--
The programmer is fighting against the two most
destructive forces in the universe: entropy and
human stupidity.               -- Damian Conway

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to