• ベストアンサー
  • 困ってます

pl内から別のplの実行

requireとかサブルーチン化にしたりしないで、例えばただ単に01.plが終了した後に02.plを実行させる命令ってperlにありますか?

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数263
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
noname#151056
noname#151056

どういう目的なのかが読めなかったのですが、、、 たとえば 01.pl の最後に system("perl 02.pl"); とつければ、実行場所やパス設定にもよりますが 実現可能かと。。。 プロセスが二つ立ち上がっちゃうから system より exec のほうがいいのかな? どちらにしてもあまりかっこよくないですね。(^^;

共感・感謝の気持ちを伝えよう!

質問者からの補足

ありがとうございます。できました。 ついでにここで質問してしまうのですが、例えば01.pl内でグローバル変数に値を設定しても02.plへは引き渡されないのですが... そのような時には、やはりサブルーチン化したほうが良いってことなのでしょうか?

関連するQ&A

  • plファイルの中で他のplファイルを実行

    A.plファイルとそれに付随するpmファイルがあります。 別のB.plでA.plに値を渡しながらループさせてA.plを実行し得られた値をB.plに返すことがしたいのですが、 B.plで ループ始点 require('A.pl'); ループ終点 だと一回きりの実行結果しか得られず。 #`perl A.pl @AAA`; だとreturnできずエラー となってしまいます。 何か良い方法は無いでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • require後、関数を実行時にサブルーチンが存在すれば実行させたい

    perlでrequire後、関数を実行時にサブルーチンが存在すれば実行させたいのですが、どうやれば調べられるかご存知でしたらご教授願えませんでしょうか。 foreach(...){ require "$file"; &Print;・・・ここでエラーが出てしまうのを関数が存在する場合だけ実行するようにしたいのです。 } 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • jcode.pl と &ReadParse()

    CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

    • ベストアンサー
    • CGI

その他の回答 (2)

  • 回答No.3
noname#151056
noname#151056

補足に対する回答ですが、 一度 perl を起動し、その中からまた別の perl を起動しているので、 01.pl と 02.pl の実行は別プロセスになりますから グローバル変数の値は当然引き渡されませんよね。 01.pl 内で require で 02.pl を読み込みば引き渡されます。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
noname#9414
noname#9414

回答ではなくてすみません。 サブルーチン化した方が、後々使うことが出来る ので、効率はいいと思うのですが・・・ 回答の方はtty様のがいいと思います。 ではでは☆

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • z.htmlが呼ばれる度にz.plを実行するため

    z.htmlを <html> <img src="http://xxx.com/z.pl width="0" height="0"/> Hello World. </html> としたのですがこれだとソース表示で http://xxx.com/z.pl が見えてしまいz.plの存在を知りを他人が自身のページにz.plのリンクを貼るとう悪さをされかねません z.htmlが呼ばれたときにz.plを実行する方法について http://xxx.com/z.pl を見えないようにする方法は無いでしょうか?

    • ベストアンサー
    • CGI
  • pl

    a.cgiファイルがあるとします。 同ディレクトリにa.plがあるとします。 a.cgiにあったものをa.plの関数(サブルーチン)に移し a.cgiで呼び出したら負荷は軽減されますか? 文才ないのでわかりにくかったらこっち見てください。 a.cgi(HTMLソースが1000行あるとします) それを全部消し、a.plに移します。 そのa.plをa.cgiで呼び出したらかわりますか?

  • Can't locate jcode.pl in @INC...

    perlスクリプトをcrontabで、   0 * * * * /フルパス と起動したところ、 上記のエラーがでます。 エラー部分は、   require './jcode.pl'; です。 requireにフルパスを打ったら、直ったんですが、なぜでしょう。 Perlの設定が悪いのでしょうか?

    • ベストアンサー
    • Perl
  • cgiとplとpm

    掲示板ソースをダウンロードするとplやpmという拡張子のものがありました。中身はPerlでした。 拡張子の使い分けを教えてください。 適当に4つのルールを書いてみましたので、間違っていたり、追加するルールがありましたから教えてください。 1 ブラウザがそれ自身にアクセスし、ブラウザのアドレスバーに表示させるならcgiにするべき。 2 Perlのpackageの機能を使うなら、パッケージファイルはplかpmでなくてはならない。 3 Perlのrequireの機能を使うなら、その外部ファイルはplでなくてはいけない。 4 Perlのuseの機能を使うなら、その外部ファイルはpmでなくてはならない。

    • ベストアンサー
    • Perl
  • Cygwin上でperlスクリプトの実行

    Cygwin上で、例えば「hello.pl」というperlスクリプトを 実行するのに $ perl hello.pl や $ ./hello.pl では実行できるのに $ hello.pl だと bash: hello.pl: command not found と なってしまって実行できません。 $ hello.pl でコマンド化して実行したいのですが どのようにすればよいか教えてください。

  • AUTOLOADサブルーチンが実行される条件?

    Perlのコードを動かしながら勉強していて、ふと納得いかない点があったので教えてください。 次のコードを実行すると'0'と表示されます。 Cls->new; package Cls; sub new {bless([])} sub AUTOLOAD {print(0)} つまりAUTOLOADサブルーチンが実行されているようです。 しかし私のコードの中ではAUTOLOADサブルーチンの定義はしているものの、どこからも呼び出していません。 このコードは何も行わずに終了するはずなのですが、そうではありませんでした。 AUTOLOADサブルーチンは、いつ、どこで、何者によって呼び出されるのでしょうか。

    • ベストアンサー
    • Perl
  • 'cgi-lib.pl'などのファイルの位置は?

    Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

    • ベストアンサー
    • Perl
  • requireの使い方のどこがおかしいのでしょう?

    言語はperlです。 789.cgiから456.plを呼び出したいのですが、シンタックスエラーが出てきます。 789.cgiのrequireに関する行をコメントにしたら実行されるのですが…。 requireを使わずに、サブルーチン自体を789.cgiの中に書き込むことには成功しているのですが、 イマイチrequireを使った呼び出しのコツがわかりません。 どなたかご教授下さい。 以下にスクリプトを示しておきます。 よろしくお願いします。 *****以下789.cgi***** #!/usr/local/bin/perl use CGI::Carp qw(fatalsToBrowser); require "456.pl"; $a=12; $b=15; $d="xxxxxxxx"; $d=&plus(); print "content-type:text/html\n\n"; print <<"HTML_HTML"; <html> <head> <title> ヒアドキュメント </title> <body> ***** <br> $d <br> ***** <br> $a <br> ***** <br> $b <br> ***** </body> </html> HTML_HTML ***********以下456.pl************ sub plus { my $a=10; my $b=10; $c=$a+$b; return $c; }

    • ベストアンサー
    • CGI
  • HTMLからのpl実行

    htmlのタグに下記のように記述し(test.html) <FORM METHOD="POST" ACTION="http://192.168.100.100:8080/cgi-bin/test.pl"> cgi-binにあるtest.plを実行したいのですが、 test.plのコードの中身がブラウザに表示されてしまいます。 httpd.confの設定は下記のように設定してあり、 権限もtest.pl,test.htmlともに755で設定しています。 ** ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory "/usr/local/apache/cgi-bin/"> AllowOverride None Options None Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi .pl .rb

    • ベストアンサー
    • CGI
  • requireしたライブラリにuseを記入

    メール送信のプログラムを作っています。 本体のプログラムmain.cgiから、 メール送信用のサブルーチンを記入した、 email.plというのを require 'email.pl'; とメール送信が必要な場合だけ読み込んでいます。 この email.plに use Encode; や use Jcode; のようにuse文を記入するのは、 Perlの作法としては適切なのでしょうか。 それともuse文はmain.cgiに記入するのが適切なのでしょうか。 email.plにuse文を記入しても動きますし、 main.cgiにuse文を記入した場合とベンチマークを比べたりしましたが あまり変わらないのですが、 useはコンパイルしたときに実行されるので、 実行のときに読み込まれるrequireしたライブラリに記入していいのか不安なのです。 私としては必要なときだけ読み込みたいので、 email.plにuse文を記入したいのですが。 どうぞよろしくお願いします。