如何将shell脚本转换为Perl?

如何将shell脚本转换为Perl?,perl,Perl,我有一个shell脚本: #!usr/bin/bash branch_name=$1 task_name=$2 createviewset ccm -b $branch_name -t $task_name source setenv $task_name rest of the code 现在我想把这个脚本转换成Perl脚本。我该怎么做?到目前为止,我在代码中写了些什么,但这段代码似乎不起作用 !/usr/bin/perl use warnings; use strict; my branc

我有一个shell脚本:

#!usr/bin/bash
branch_name=$1
task_name=$2
createviewset ccm -b $branch_name -t $task_name
source setenv $task_name
rest of the code
现在我想把这个脚本转换成Perl脚本。我该怎么做?到目前为止,我在代码中写了些什么,但这段代码似乎不起作用

!/usr/bin/perl
use warnings;
use strict;
my branch_name;
my task_name;
createviewset ccm -b $branch_name -t $task_name 
source setenv $task_name 
这里的
createviewset
是我在这里调用的一个现有脚本。

您应该访问(可以使用多种语言)或者先学习一些Perl

您的shell脚本不需要复制命令行值。你还用了#!usr/bin/bash不起作用,因为路径是/usr/bin/bash或(更常见的)/bin/bash:

#!/bin/bash
createviewset ccm -b $1 -t $2
source setenv $2
rest of the code
Perl将所有命令行参数分配给。此示例打印两个参数:

#!/usr/bin/perl
print $ARGV[0];
print $ARGV[1];
请注意,在bash脚本中,编号从0开始,而不是从$1开始

下一部分是在Perl:Use中运行外部(shell)命令


请注意,源命令将不起作用,因为Perl脚本不是shell脚本,不能“包含”Bash脚本。我很感激您尝试使用Perl解决您的问题,但是看起来Bash是解决这个问题的更好的工具。

嗯,shell脚本和Perl是完全不同的。您不能期望一个代码只与另一个代码一起工作。您必须实际学习一些Perl。对于堆栈溢出问题来说,这是一个过于宽泛的主题。我看到的第一个问题是,您从未访问comman line参数,其次是您不知道如何调用外部代码。可能还有更多,但紧迫的问题是:您显然不太懂perl,那么为什么要转换脚本呢正如@Biffen所说,学习perl对这里来说太宽泛了。@Henrik:“你永远不会访问comman行参数”前两个参数被复制到临时变量
branch\u name
task\u name
,代码使用这些参数。我知道让bash脚本简洁而神秘是一种时尚,但在我看来,这是记录代码内容的绝佳方式doing@Borodin他是指Perl。我认为OP不值得这么做,但这是一个非常好的答案。我唯一要更改的是使用
my($branch\u name,$task\u name)=@ARGV
。这样代码就更有意义,并且与OP的原始bash代码更好地对应,索引问题也就无关紧要了。你是对的。我通常尽量避免抄袭任何东西,因为如果大量使用的话会非常昂贵,但对教育来说会更好。我认为“非常昂贵”是不现实的。很少有应用程序包含一个中央bash脚本,在这个脚本中可以复制数百万次。在bash脚本中使用
$1
$2
等的主要原因是为了简洁,没有理由直接在Perl代码中访问
@ARGV
元素
#!/usr/bin/perl
use strict;
use warnings;

system 'createviewset','ccm','-b',$ARGV[0],'-t',$ARGV[1];
system 'source','setenv',$ARGV[1];