How can one pass command line arguments via file association in Vista 64?
I recently built a PC running Vista Ultimate 64-bit. I noticed several of the Perl scripts I transferred failed due to command-line arguments not being passed. As a simple test, I wrote the following (foo.pl):
#!/usr/bin/perl -w
use strict;
my $num_args = $#ARGV + 1;
print "${num_args} arguments read\n";
print "$^X\n" # to see what was being used
Running "foo.pl 1 2 3" undesirably yielded:
0 arguments read
C:\strawberry\perl\bin\perl.exe
Running "perl foo.pl 1 2 3" expectedly yielded:
3 arguments read
C:\strawberry\perl\bin\perl.exe
On my old Windows XP PC, both invocations returned 3 arguments. I documented more of my sleuthing here (win32.perl.org wiki talk), but I've yet to find a solution that works.
I've also tried ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi to no avail.
Any help would be appreciated. This is driving me batty.
I just tried ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi on my Vista 64 Ultimate and it worked.
F:\prog\perl>foo.pl 1 2 3
3 arguments read
C:\Perl64\bin\perl.exe
That means devio is right: it must be an "file association" issue;
On an explorer, right-click on your .pl file and ask "Open with": use the "Perl Command Line interpreter" and it will work (and select "always use this program to open this type of file").
To me, "Vista's file extension manager removed the ability to pass arguments to functions" seems wrong...
I do see:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Perl\shell\Open\command]
@="\"C:\\Perl64\\bin\\perl.exe\" \"%1\" %*"
Meaning if your installation did not put that kind of value in your registry, it is because:
Note:
\"C:\\Perl64\\bin\\perl.exe\" \"%1\"
without the %*
argument)