我有一个连接到plex api的perl脚本。它登录并执行某些操作(主要是工作)。
但是,plex api建议(坚持?)脚本的每个实例发送一个唯一的ID,以便如果我与其他任何人共享此脚本,他们应该使用其他字符串。
为了保持简单,我不想拥有一些配置文件,以使该值不在脚本之外。我也不能留下一个硬编码的价值,没有人下载它会改变它。
perl脚本可以自行修改吗?
如果我要这样声明:
my $uuid = 1;
...然后,我不能在此之后立即检查该值是否等于1,如果这样用随机生成的UUID覆盖该值?然后,脚本将退出,但以某种方式重新启动(因此用户不必第二次运行)。
有安全的方法吗?另外,是否有更好的方法可以在不使用此方法的情况下实现目标?
制作脚本__DATA__
的最后一行,并在安装或第一次运行时将ID附加到脚本上。从特殊<DATA>
读物读取脚本的数据段。
您可以使用 UUID::Tiny
生成随机uuid:
use UUID::Tiny;
my $uuid = create_UUID(UUID_V4);
要保留在调用之间的UUID,您必须修改脚本本身。该线程中的答案可能会有所帮助。
更新
您在评论中说,您想要一个不同的唯一ID "每个安装" ,但您还说"对于任何给定的用户,它都需要相同的值" ,所以我不再确定我的答案会满足您的要求
我建议您使用dmidecode
返回的系统UUID。当然,您需要将其安装在计算机上,并且在CPAN上有一个解析器模块,称为Parse::DMIDecode
如果您必须支持Windows系统,则稍微复杂一点。您可以将 dmidecode用于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