0

我正在尝试使用 uuidgen (unix) 生成一个唯一编号。生成的唯一编号应存储在变量中。当我在函数中执行此操作时,我遇到了错误。

谁能让我知道如何在 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 时,我面临以下错误。任何人都可以帮助我在 perl 中导出 JAVA VARIABLE 吗?如何导出路径变量,以防此错误与此有关。

错误 :

         /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

7

您在这里混合了 C 和 Perl。据我所知,您无法从 perl 以这种方式访问​​ exportet 系统变量(如果我错了,请纠正我。我对 linux 系统变量了解不多)。

生成 UUID 的一种方法是来自 CPAN的Data::GUID模块

use strict;
use warnings;
use Data::GUID qw( guid_string );

my $guid = guid_string();
print "$guid\n";

Perl 也没有int main函数。您的代码从顶部开始并向下运行。当然,如果您创建一个面向对象的模块,这会有所不同。

于 2013-10-17T11:53:12.557 回答
2

在不了解 uuidgen 的情况下:你可以

my $perlVar = `uuidgen`;

在 perl 中。假设在您的控制台中调用 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是一个将变量和值添加到其环境块的 shell 命令。环境块是进程私有的,但(默认情况下)复制到子进程。你似乎认为它是某种全球区域——它不是。

所以,你要做的就是为 shell 的环境块添加一个值,而不是你自己的!(这是由 创建的外壳system(),而不是您从中运行的外壳)。放置export内部反引号很奇怪,如果不是错误的话。

更容易使用:

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

请注意,我使用qx而不是反引号 `` 因为它们可能会造成混淆(反引号在 UNIX shell 中也已弃用)。

要运行子例程,请松开 C 样式int main

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

子例程调用的前导&具有您可能不需要的副作用。

于 2013-10-17T13:53:35.617 回答