On Monday 03 December 2007 15:19, [EMAIL PROTECTED] wrote:
> John W.Krahn <[EMAIL PROTECTED]> writes:
> > On Monday 03 December 2007 10:34, [EMAIL PROTECTED] wrote:
> >> John W.Krahn <[EMAIL PROTECTED]> writes:
> >> > If you want to incorporate the grep into the perl program then
> >> > this may work (UNTESTED):
> >>
> >> It works with 1 change and one caveat,  The cavaet is that the
> >> file names in $ARGV must be absolute format or the program fails.
> >
> > The following program does not use the $ARGV variable, nor does
> > Perl use it.
>
> Make that @ARGV.
>
> >> That
> >> has something to do with File::Finds builtin of cd ing to the
> >> source directory I think.
> >
> > ???
>
> Try this test:
>   ls src
>  1   100  102  104  106  108  11   111  113  115
>  10  101  103  105  107  109  110  112  114  116
>
>  ls dest
>  (nothing in it yet)
>
>   ./Krahn1.pl 'Subject:' src dest
>   Cannot open 'dest/1' No such file or directory at ./Krahn1.pl line
> 38.
>
> Now with absolute names in @ARGV.
>
>   ./Krahn1.pl 'Subject:' `pwd`/src `pwd`/dest
>   <20> files copied from:
>      /home/reader/projects/perl/work/src
>   to
>      /home/reader/projects/perl/work/dest
>   <20> files now in: /home/reader/projects/perl/work/dest
>
> I thought it might be because File::Find cds to the target dir then
> names like src dir or  ./src ./dir fail.  Just guessing

OK, that's my mistake, as I said I didn't test it ... oops.  :-)

You can either use File::Find's no_chdir option:

find { no_chdir => 1, wanted => sub {

    # same code here

    } }, $SrcDir;


Or you can prepend the cwd to the $TrgDir variable:

use Cwd;

$TrgDir = getcwd() . "/$TrgDir" unless $TrgDir =~ /\A\//;


> >> ## [ I don't really understand why some of the processing is done.
> >>  I ## hadn't seen `:raw' used before but apparently the :raw part
> >> is ## there to handle the possiblitiy of different line endings in
> >> the ## files.  Then size is checked; apparently to ensure the size
> >> reported ## in -s is the same when `read'
> >
> > Correct.
> >
> >> ## And then the data is `printed' to its new home instead of just
> >> ## being copied there.... why is that being done?
> >
> > It is being copied, since all the data from the old file is in the
> > $data variable it is copied to the new file.
>
> I guess I can see why you might want to use that printing technique
> so as not to have to bring in `use File::Copy;'

If you used File::Copy then it would have to open the file and read and 
write the contents again, but since you already have the contents of 
the file in $data in order to match it you can just print $data to the 
new file.


> But I'm still wondering why its necessary or a good idea to use the
> size checking and raw.

perldoc -f binmode


> What would be the result if a file failed the test

It would mean that read() did not read the entire file contents.


> or conversely if one got copied over that didn't satisfy such a
> test?

It would mean that there is a possibility that not all of the data was 
copied correctly.



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to