Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^3: How to create symlink using Perl?

by reddevil (Initiate)
on Oct 23, 2011 at 18:19 UTC ( [id://933226]=note: print w/replies, xml ) Need Help??


in reply to Re^2: How to create symlink using Perl?
in thread How to create symlink using Perl?

This module is reported to be broken in current versions of activestate perl:  http://code.activestate.com/ppm/Win32-Symlink/  http://matrix.cpantesters.org/?dist=Win32-Symlink+0.04

Am using activestate Perl version 5.12.3.1204 and windows 7 32bit with NTFS. How to shell out to mklink?

Replies are listed 'Best First'.
Re^4: How to create symlink using Perl?
by Corion (Patriarch) on Oct 23, 2011 at 18:41 UTC
Re^4: How to create symlink using Perl?
by reddevil (Initiate) on Oct 23, 2011 at 23:10 UTC

    I tried with active perl version 5.8.8 and the Win32::Symlink module got installed. But it created only directory juntion despite passing a file.

    @Corion Thanks for the suggestion. Now I am able to run the mklink command of windows directly inside in perl script and able to create the desired symbolic links.
    my $oldfilename = File::Spec->catfile($oldname); my $newfilename = File::Spec->catfile($newname); if(-f $newfilename){ } else { @args = ("mklink", $newfilename, $oldfilename); system(@args) == 0; }

      I tried with active perl version 5.8.8 and the Win32::Symlink module got installed. But it created only directory junction despite passing a file.
      To (hard) link a file on Windows, you don't need a module, just use the built-in Perl link function. For example:
      link $oldfile, $newfile or die "link failed: $!";
      You should only use Win32::Symlink for directories, not files. That's because Windows junctions are for directories only; see Hard Links and Junctions and Creating Symbolic Links and Symbolic Links for details.

      As for the Win32::Symlink 0.04 PPM failures you mentioned, I just tried building it from source and it failed to compile due to an incompatibility with struct REPARSE_DATA_BUFFER between Win32::Symlink and the Microsoft header files, so I just raised a ticket #71879. BTW, I was able to get it to build simply by hacking tclreadlink.c, changing REPARSE_DATA_BUFFER to MY_REPARSE_DATA_BUFFER.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://933226]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-03-29 06:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found