如何让perl脚本的每个实例都有自己唯一的ID?

时间:2016-06-21 21:35:22

标签: perl mechanize uuid plex

我有一个连接到Plex API的perl脚本。它登录并执行某些操作(主要是工作)。

但是,Plex API建议(坚持?)脚本的每个实例都会发送一个唯一的ID,这样如果我与其他任何人共享此脚本,他们应该使用不同的字符串。

为了保持这种简单,我不想让一些配置文件将该值保留在脚本之外。我也不能保留硬编码的值,没有人下载它会改变它。

perl脚本可以自行修改吗?

如果我要这样声明:

my $uuid = 1;

...然后如果此值等于1,我可以立即检查,如果是这样,用随机生成的uuid覆盖它?然后该脚本将退出,但不知何故重新调用自身(因此用户不必再次运行它)。

有安全的方法吗?或者,有没有更好的方法来实现目标而不使用这种方法?

3 个答案:

答案 0 :(得分:1)

创建脚本__DATA__的最后一行,并在安装或首次运行时将ID附加到脚本。从特殊<DATA>句柄读取将读取脚本的数据段。

答案 1 :(得分:0)

您可以使用UUID::Tiny生成random UUID

use UUID::Tiny;   
my $uuid = create_UUID(UUID_V4);

要在调用之间保留UUID,您必须自己修改脚本。这个thread中的答案可能会有所帮助。

答案 2 :(得分:0)

更新

您在评论中说您想要一个不同的唯一身份"per installation",但您也说"it needs to be the same value for any given user",所以我不再确定我的答案是否符合您的要求

我建议您使用dmidecode返回的系统UUID。当然,您需要在计算机上安装它,并且在CPAN上有一个名为Parse::DMIDecode的解析器模块

如果您必须支持Windows系统,则会稍微复杂一些。您可以使用DmiDecode for Windows作为现成的二进制文件,但解析器模块显式检查demidecode可执行文件的路径中没有冒号(以及其他内容),因此调用probe方法不起作用。相反,您必须致电demidecode并将结果传递给parse方法

这个简短的例子适用于Linux和Windows

use strict;
use warnings 'all';
use feature 'say';

use Parse::DMIDecode;

my $decoder = Parse::DMIDecode->new;
$decoder->parse(qx{dmidecode});

say $decoder->keyword('system-uuid');

输出

35304535-3439-4344-3232-3245FFFFFFFF