Sch*_*ern 12 c windows perl command-line
我正在编写一个名为perl5i的perl模块.它的目标是在一个模块中修复一大堆常见的Perl问题(使用许多其他模块).
要在命令行上为一个内容调用它,你会写:perl -Mperl5i -e 'say "Hello"'
我认为这太冗长,所以我想提供一个perl5i包装器,这样你就可以写了perl5i -e 'say "Hello"'
.我也希望人们能够编写脚本,#!/usr/bin/perl5i
因此它必须是一个已编译的C程序.
我想我所要做的就是将"-Mperl5i"推到参数列表的前面并调用perl.这就是我尝试过的.
#include <unistd.h>
#include <stdlib.h>
/*
* Meant to mimic the shell command
* exec perl -Mperl5i "$@"
*
* This is a C program so it works in a #! line.
*/
int main (int argc, char* argv[]) {
int i;
/* This value is set by a program which generates this C file */
const char* perl_cmd = "/usr/local/perl/5.10.0/bin/perl";
char* perl_args[argc+1];
perl_args[0] = argv[0];
perl_args[1] = "-Mperl5i";
for( i = 1; i <= argc; i++ ) {
perl_args[i+1] = argv[i];
}
return execv( perl_cmd, perl_args );
}
Run Code Online (Sandbox Code Playgroud)
Windows使这种方法复杂化.显然,Windows中的程序不传递参数数组,它们将所有参数作为单个字符串传递,然后进行自己的解析!因此,像perl5i -e "say 'Hello'"
成为perl -Mperl5i -e say 'Hello'
和Windows无法处理缺乏引用.
那么,我该怎么处理呢?在Windows上包装引号中的所有内容并转义?有没有图书馆来处理这个问题?有更好的方法吗?我可以不在Windows上生成C程序并将其写为perl包装器,因为它不支持#!无论如何?
更新:更明确一点,这是运送软件所以需要使用某个shell或调整shell配置(例如alias perl5i='perl -Mperl5i'
)的解决方案并不令人满意.
Ale*_*ack -1
如果您能够使用 C++,那么 Boost.Program_options 可能会有所帮助:
http://www.boost.org/doc/libs/1_39_0/doc/html/program_options.html