将Perl脚本作为具有特定名称的进程产生

我需要一个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”:

  • 在任务pipe理器中,进程1234仍然被命名为“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” ,所以没有必要撒谎什么。