我正在尝试使用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();
}
答案 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();
子程序调用中的前导&
具有您可能不需要的副作用。