我需要一个Perl脚本来产生一个任意的名字,也就是说, 让其余的操作系统将它看作是例如“aaa.exe”。 我有印象,这是可能在Perl中做,但现在我不知道。
我在Windows 7 amd64上使用草莓Perl 5.14,32位版本。
这是我的尝试,不工作:
#!perl -w # spawnself.pl if ($ARGV[0]) { my $name = ($ARGV[0]); system {"perl"} $name, $0; } else { print "running as $^X, PID is $$\n"; print "press Enter to quit...\n"; my $trash = <>; }
我是以exec perldoc页面 (系统页面链接)为例来编写的: exec {'/bin/csh'} '-sh';
在那里,IIUC,目标是让/ bin / csh认为它是“-sh”,尽pipe我不确定这是否也应该使csh看起来像“-sh”。 另外,这是UNIX的例子,而我在Windows上。
我想有一个脚本,它正在运行(从命令行) spawnself.pl aaa.exe
会自行产生,打印running as aaa.exe, PID is 1234
,并查看任务pipe理器将显示此程序为“ aaa.exe”。 但是,我的片段以及世界其他地方仍然将自己视为“perl.exe”:
running as C:\path\to\my\perl.exe, PID is 1234
我究竟做错了什么? 请问有人可以谈谈这个?
我发现一个相当丑陋的,虽然工作,黑客:
#!perl -w #spawnself-ugly.pl use File::Copy; if ($ARGV[0]) { my $name = ($ARGV[0]); copy($^X, $name); my @args = ($name, $0); system @args; } else { print "running as $^X, PID is $$\n"; print "press Enter to quit...\n"; my $trash = <>; }
我真的做了一个perl.exe的副本,并运行一个,所以最后我只是运行“aaa.exe” ,所以没有必要撒谎什么。