我有一个连接到Plex API的perl脚本。它登录并执行某些操作(主要是工作)。
但是,Plex API建议(坚持?)脚本的每个实例都会发送一个唯一的ID,这样如果我与其他任何人共享此脚本,他们应该使用不同的字符串。
为了保持这种简单,我不想让一些配置文件将该值保留在脚本之外。我也不能保留硬编码的值,没有人下载它会改变它。
perl脚本可以自行修改吗?
如果我要这样声明:
my $uuid = 1;
...然后如果此值等于1,我可以立即检查,如果是这样,用随机生成的uuid覆盖它?然后该脚本将退出,但不知何故重新调用自身(因此用户不必再次运行它)。
有安全的方法吗?或者,有没有更好的方法来实现目标而不使用这种方法?
答案 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