http://qs1969.pair.com?node_id=174212

c has asked for the wisdom of the Perl Monks concerning the following question:

I am using File::NCopy to recursively copy a directory with preserved permissions. The module is located within @INC and I receive no error that the mod is unable to be loaded, however it appears that the script is not acknowledging the object created through the module. It sees it as an empty variable. My code:

#!/usr/bin/perl -w use strict; use File::NCopy; my $copy_file = File::NCopy->new ( 'recursive' => 1, 'preserve' => 1, 'force-write' => 1, ); $copy_file->copy "/ref/webmail","/www/$domain";

However, when I run perl -c on the script I receive:

String found where operator expected at newclient line 225, near "->co +py "/ref/webmail"" (Missing operator before "/ref/webmail"?) syntax error at newclient line 225, near "->copy "/ref/webmail"" newclient had compilation errors.

I've shortened my script for the purposes of posting, but the error directs you to the line it is having problems with. It seems that it is just viewing $copy_file as empty.

Can someone explain why this is happening?

Thanks -c

Replies are listed 'Best First'.
Re: Module object seen as empty variable?
by vladb (Vicar) on Jun 13, 2002 at 14:31 UTC
    This works correctly for me:
    #!/usr/bin/perl -w use strict; use File::NCopy; my $copy_file = File::NCopy->new ( 'recursive' => 1, 'preserve' => 1, 'force-write' => 1, ); # WAS: $copy_file->copy "/ref/webmail","/www/$domain"; $copy_file->copy("/ref/webmail","/www/$domain");
    You simply forgot to put a pair of '(' and ')' in your '->copy' call.

    _____________________
      What a drag. That fixed it! The perldoc for the module seems to indicate that the parens arent necessary:

      $file = File::NCopy->new(recursive => 1); $file->copy "file","other_file"; $file->copy "directory1","directory2"; $file = File::NCopy->new(u_chmod => \&my_chmod,f_check => \ +&my_fchec k); $file->copy "directory1","directory2";

      Thanks heaps! -c

Re: Module object seen as empty variable?
by Hofmator (Curate) on Jun 13, 2002 at 15:56 UTC

    Quoting from perlobj under 'Method Invocation':

    For C++ fans, there's also a syntax using -> notation that
    does exactly the same thing.  The parentheses are required
    if there are any arguments.
     
    $fred = Critter->find("Fred");
    $fred->display('Height', 'Weight');
    
    
    The indirect object syntax should also work without parens:

    copy $copy_file "/ref/webmail","/www/$domain";

    But as TheDamian - and many other people - tell us, this brings more pain than joy, so I'd stick with the extra parentheses.

    -- Hofmator