-2

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

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

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

perl 脚本可以自己修改吗?

如果我这样声明:

my $uuid = 1;

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

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

4

3 回答 3

1

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

于 2016-06-23T03:10:07.393 回答
0

您可以使用UUID::Tiny生成随机 UUID

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

要在调用之间保留 UUID,您必须修改脚本本身。此线程中的答案可能会有所帮助。

于 2016-06-21T21:44:59.297 回答
0

更新

您在评论中说您希望“每次安装”有一个不同的唯一 ID ,但您还说“对于任何给定用户,它必须是相同的值”,所以我不再确定我的回答是否能满足您的要求


我建议您使用dmidecode. 当然,您需要将它安装在您的计算机上,并且在 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
于 2016-06-22T04:34:11.993 回答