2016-04-22 33 views
-6

私は、シェルスクリプトを持っている:シェルスクリプトをPerlに変換するにはどうしたらいいですか?

#!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は私がここで呼び出す既存のスクリプトです。

+4

まあ、シェルスクリプトとPerlはかなり異なっています。あなたは、ある人のコードがもう一方の人と一緒に働くことは期待できません。あなたは実際にPerlを*実際に学ばなければならないでしょう。そしてそれはStack Overflowの問題の対象が広すぎます。 – Biffen

+2

私が見る最初の問題は、あなたが決してコマンドラインパラメータにアクセスしないことです。次に、あなたは外部コードを呼び出すことを知らないということです。多分もっと多くのことがありますが、押しつける質問は:あなたは明らかに多くのperlを知らないので、なぜスクリプトを変換したいのですか? - そして、@ Biffenが言ったように、perlを学ぶことはここではあまりにも広すぎるテーマです。 – Henrik

+0

@Henrik:* "あなたは決してコマンドラインパラメータにアクセスしません" *最初の2つのパラメータは一時変数 'branch_name'と' task_name'にコピーされ、コードはそれらを使用します。 bashスクリプトを簡潔かつわかりやすくすることは流行っていますが、IMOはコードが何をしているかを文書化する優れた方法です。 – Borodin

答えて

3

Perlを最初に学ぶには、http://perlmaven.com/(多くの言語で利用可能)またはhttp://learn.perl.org/をご覧ください。

シェルスクリプトでコマンドライン値をコピーする必要はありません。

#!/bin/bash 
createviewset ccm -b $1 -t $2 
source setenv $2 
rest of the code 

Perlはにすべてのコマンドライン引数を割り当てます!あなたはまた、パスに/ usr/binに/ bashや(より一般的な)/ binに/ bashのいずれかであるため、動作しません#USR/binに/ bashのを使用しますthe array @ARGV。このサンプルでは、​​あなたの二つの引数を出力します。番号は、あなたのbashスクリプトで$ 1のように0ではなく1から始まる

#!/usr/bin/perl 
print $ARGV[0]; 
print $ARGV[1]; 

ていることに注意してください。

次の部分はPerlで外部(シェル)コマンドを実行しています。the system commandを使用してください。

#!/usr/bin/perl 
use strict; 
use warnings; 

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

Perlスクリプトは、シェルスクリプトではなく、bashスクリプト「を含める」ことができないためソースコマンドが動作しないことに注意してください。私はあなたの問題にPerlを使用しようとしていることに感謝しますが、これはBashがもっと良いツールだと思われます。

+1

私はOPがそれにふさわしいとは思わないが、これは良い答えです。私が変更したいのは 'my($ branch_name、$ task_name)= @ ARGV'を使うことだけです。そうすれば、コードはより意味深くなり、OPのオリジナルのbashコードによく対応し、インデックスの問題は無関係です。 – Borodin

+0

あなたは正しいです。私は通常、すべてをコピーすることを避けようとしていますが、それは頻繁に使用されると非常に高価ですが、教育にとってはより良いでしょう。 – Sebastian

+0

私は "非常に高価" *は非現実的だと思います。非常に少数のアプリケーションは、コピーが何百万回も作成される中央のbashスクリプトで構成されています。 bashスクリプトで '$ 1'、' $ 2'などを使う主な理由は、簡潔にするためであり、Perlコードの '@ ARGV'要素に直接アクセスする*理由はありません – Borodin

関連する問題