-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

ランダムな UUIDUUID::Tinyを生成するために使用できます。

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

呼び出し間で UUID を保持するには、スクリプト自体を変更する必要があります。このスレッドの回答が役立つ場合があります。

于 2016-06-21T21:44:59.297 に答える
0

アップデート

コメントで、「インストールごとに」異なる一意のIDが必要だと言っていますが、「特定のユーザーに対して同じ値である必要がある」とも言っているため、私の答えが要件を満たすかどうかはわかりません


によって返されるシステム UUID を使用することをお勧めします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 に答える