如何使Perl脚本的每个实例都有其独特的ID



我有一个连接到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

相关内容

  • 没有找到相关文章

最新更新