0

(unixの)uuidgenを使用して一意の番号を生成しようとしています。生成された一意の番号は、変数に格納する必要があります。function で実行しているとき、エラーに直面しています。

perl で uuidgen スクリプトを使用する方法を教えてください。

    #!/usr/bin/perl
    sub function_uuidgen
    {
       my myuuid;

       system(`export myuuid=uuidgen`);
       print "\n unique id is : $myuuid";

       # I need not to export the variable, I just need to unique number generated by UUID GENERATOR in a variable.
     }

     int main
     {
        print "\n I am in main function";
        &function_uuidgen;
     }

下記のように uuidgen を実行しているときに、以下のエラーに直面しています。Java VARIABLE を perl でエクスポートするのを手伝ってくれる人はいますか? このエラーがそれに関連している場合に備えて、パス変数をエクスポートする方法。

エラー :

         /bin/java: uuidgen 1: not found

コード :

   sub function_uuidgen
    {

   my $myuuid = qx(uuidgen);
   chomp $myuuid;

   print "\n unique id is : $myuuid";

   # I need to export the variable, as it is giving me error without exporting.
    }

   int main
   {
    print "\n I am in main function";
    function_uuidgen();
   }
4

4 に答える 4

2

uuidgen について何も知らなくても:

my $perlVar = `uuidgen`;

パール内。コンソールで uuidgen を呼び出すと、探している番号が返されると仮定します。

于 2013-10-17T11:59:34.423 に答える
2

何らかの理由で Data::GUID を使用できない場合、これは uuidgen の出力を使用する方法です (バッククォートに注意してください)。

#!/usr/bin/perl

use strict;
use warnings;

my $uuid=`uuidgen`;
chomp $uuid;

print "$uuid\n";

出力例:

$ ./hep.pl 
fe82c4f6-a1f2-4242-ab45-853780931927
$ 

また、関数呼び出しの前に & を使用することは、何年も前に時代遅れになりました:-)

于 2013-10-17T12:00:53.210 に答える
2

export環境ブロックに変数と値を追加するシェル コマンドです。環境ブロックはプロセスに対してプライベートですが、(デフォルトでは) 子プロセスにコピーされます。あなたはそれがある種の地球規模の領域であると考えているようですが、そうではありません。

つまり、シェルの環境ブロックに値を追加するだけで、自分の環境ブロックには追加できません! (これは によって作成されたシェルsystem()であり、実行元のシェルではありません)。export間違っていないとしても、バックティックを内側に配置するのは奇妙です。

使いやすい:

my $myuuid = qx(uuidgen);
chomp $myuuid;

qx混乱を招く可能性があるため、バックティック `` の代わりに使用していることに注意してください (バックティックは UNIX シェルでも非推奨です)。

サブルーチンを実行するには、C スタイルを緩めますint main

print "\n I am in ", __PACKAGE__, "package\n";
function_uuidgen();

サブルーチン呼び出しの先頭&には、おそらく必要のない副作用があります。

于 2013-10-17T13:53:35.617 に答える