如何在perl脚本中使用unix的UUIDGEN

时间:2013-10-17 11:46:08

标签: perl

我正在尝试使用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 个答案:

答案 0 :(得分: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功能。您的代码从顶部开始并向下延伸到底部。当然,如果您创建面向对象的模块,这会有所不同。

答案 1 :(得分:2)

对uuidgen一无所知:你可以

my $perlVar = `uuidgen`;

在perl中。 假设在控制台中调用uuidgen会返回您要查找的数字。

答案 2 :(得分: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
$ 

另外,使用&在多年前函数调用过时之前: - )

答案 3 :(得分:2)

export是一个shell命令,它向其环境块添加变量和值。环境块对进程是私有的,但(默认情况下)复制到子进程。你似乎认为它是某种全球性的领域 - 事实并非如此。

所以,你要做的就是在shell的环境块中添加一个值,而不是你自己的! (这是由system()创建的shell,而不是您运行的shell。如果没有错误,将export放在后面的蜱中是很奇怪的。

易于使用:

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

注意我使用的是qx而不是back-ticks``,因为它们可能令人困惑(在UNIX shell中也不赞成使用反向标记)。

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

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

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