【问题标题】:How can I make each instance of a perl script have its own unique id?如何使 perl 脚本的每个实例都有自己的唯一 ID?
【发布时间】:2023-04-02 20:17:01
【问题描述】:

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

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

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

perl 脚本可以自己修改吗?

如果我这样声明:

my $uuid = 1;

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

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

【问题讨论】:

  • 您是否需要为每次运行或每次安装使用不同的 ID?无论哪种方式,请使用 Data::GUID 之类的模块。
  • 每次安装。不是每次运行。
  • 这是 Linux 还是 Windows 的问题,还是两者兼而有之?
  • 这是一个 perl 问题。如果我将此脚本提供给其他人...我不知道他们可以从哪个平台运行它。

标签: perl mechanize uuid plex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这并不能完成任务。每次运行时,都会获得一个新值。对于任何给定的用户,每次运行它时,它都必须是相同的值。但它需要为每个用户提供不同的价值。低开销的单文件脚本。
    • @JohnO 在安装过程中生成 ID。
    • 这不是需要“安装过程”的东西。这是一个少于 150 行代码的单文件脚本。一半的 cmets 和空白。这太过分了。
    • @JohnO 然后在第一次运行脚本时生成它并将其存储在脚本本身或单独的文件中(我的偏好)。
    • 第一次生成它很容易。存储它...我在问如何创造性地做到这一点。即使不切实际,这是一个有趣的想法,但我不知道该怎么做。
    【解决方案3】:

    更新

    你在 cmets 中说你想要一个不同的唯一 ID "per installation",但你也说 "it needs to be the same value for any given user",所以我不再确定我的回答是否能满足你的要求


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

    如果您必须支持 Windows 系统,它会稍微复杂一些。您可以使用DmiDecode for Windows,它可作为现成的二进制文件使用,但解析器模块会明确检查demidecode 可执行文件的路径中是否没有冒号(除其他外),因此调用@987654328 @ 方法不起作用。相反,您必须调用 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
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多