問題タブ [hashref]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - IE::Mechanize で「パッケージ "sssself" エラーを介して "オブジェクト メソッド "警告" が見つかりません」を取り除くにはどうすればよいですか?
私は Win32::IE::Mechanize で遊んでいます。6 つの Web ベースの電子メール アカウントに自動的にアクセスするスクリプトを試しています。スクリプトは基本的に機能しますが、perl は一種の不可解な「パッケージ "sssself" を介してオブジェクト メソッド "警告" を見つけることができません (おそらく "sssself をロードするのを忘れた)" というエラーをスローします。エラーにもかかわらず、スクリプトはジョブを完了できます。 . しかし、私はそれを取り除き、なぜそれが起こっているのかを理解したい. 以下はスクリプトです. コードを改善できるところをコメントしてください. いつもありがとう.
行に何か問題があることを知っています
しかし、どうすれば修正できますか?それとも削除するべきですか
何事もなかったふりをする?
どんなコメントも大歓迎です:)
アップデート
私の醜いコードをクリーンアップしてくれてありがとう、@daotoad :) ネストされた構造ははるかに保守しやすく、目に優しいと思います。
そして、問題のモジュールのより良いバージョンを教えてくれた@Ericに感謝します:)
問題は、Win32::IE:Mechanize 0.009 が次の不可解なエラー メッセージを表示する場合です。
C:/Perl/site/lib/Win32/IE/Mechanize.pm の 971 行目で、パッケージ "sssself" を介してオブジェクト メソッド "warn" を見つけることができません (おそらく "sssself" をロードするのを忘れていましたか?)。
0.009_17 Dev リリースは、非常に意味のあるメッセージを私に与えてくれます。
E:\mailme.pl 行 33 に「Username」という名前による入力制御がありません
このエラー メッセージを念頭に置いて、ログイン ページのソース ファイルを確認したところ、フィールド ID は「Username」ではなく「UserName」であることが判明しました。
だから私は私の問題を修正しました:)みんなありがとう!
perl - ハッシュ要素の参照からキーを取得する方法
$my_ref = \$hash{'mary'};
#my_ref
はハッシュ要素への参照点であると仮定します。
....後で、それが指すハッシュ要素のキーを取得するため
にどのように使用できますか?$my_ref
つまり、文字列'mary'を$my_ref
?から取得する方法
ユーザー名リストのグループがいくつかあるので、この質問をします。一部のユーザー名は、メモリを消費する複数のグループに表示されます。そこで、共通のユーザー名リストを作成し、これらのグループに、ユーザー名ではなく、対応するユーザー名への参照のみを格納させることにしました。
例:元々、
ここでは、「mary」と「tom」が両方に表示され、group1
メモリgroup2
を消費していることがわかります。(この例では値を気にしないことに注意してください。データ構造体がハッシュであるため、値はここにあります)。したがって、メモリを削減するために、すべてのユーザー名を共通のリストに格納する必要があります。
グループは、ハッシュ要素の参照のみを格納します。
このアプローチは、次の理由で多くのメモリを節約できると思います。
- 1つのユーザー名が複数回ではなく1回メモリに保存されます。
- groupsは、文字列ではなく参照(整数)を格納します(私の場合、各ユーザー名の長さは平均30バイトですが、各整数は4バイト(32ビットシステム)または8バイト(64ビットシステム)のみです) (ところで、整数が4バイトまたは8バイトを使用しない場合は修正してください。)
- 参照を使用すると、ユーザー名を探すことなくすぐにアクセスできます。
しかし、どうすればグループからユーザー名を取得できますか?
を使用する@my_ref = keys %group1
と、「mary」の値は取得されますが、「mary」の値は取得されないと思います。
arrays - How to pop from an array inside a hashref?
Brain getting foggy on this one. I wanted to take my dice game from using rand() to using a list of random values from random.org. I was able to retrieve the values just fine, I'm just hung up on the syntax to pop from the list.
Here's my function that's giving me fits:
Where $dice_stack is a pointer to a hash where the key is the dice type ('6' for d6, '20' for d20), and the value is an array of integers between 1 and the dice type.
perl - Perl:ハッシュのハッシュ、配列への参照としての最後のキーを作成します
配列への参照として最後のキーを使用して、hashrefのhashrefを作成するのに少し助けが必要です。
募集内容:
これをコードパッドからの出力と比較できます。微妙な違いに注意してください。'd'がarrayrefを持つhashrefである代わりにvalue
、'd'はarrayrefであり、はありませんvalue
。
memory-leaks - サブルーチンで宣言されたハッシュへの参照を返すとメモリリークが発生しますか?
%dataを使用しています。大丈夫か、$data={};に切り替える必要があります。?
私は混乱しているので -
makeJson()が数回呼び出された場合- そしてmy %data; スタックに割り当てられ、そのアドレスが返されます-それはメモリリークではないでしょうか、それとも「リーク」ではなく「問題」でしょうか? スタックにメモリが割り当てられているため、まだ参照されているため、割り当てを解除することはできません。
他の方法: ハッシュ参照を返すサブルーチンがある場合は、%data;を使用することをお勧めします。(コンパイラによって事前に割り当てられているため、高速ですか?)または私の $data={}; ?
perl - Perl:関数からhashrefを返すことが機能しない
理解できない奇妙な振る舞いに遭遇したとき、私は何も役に立たない難読化されたコードをいじっていました。
これが私のコードです。
そしてインデントされています:
文字列を取得し、その文字列foo
への参照を作成してから、その名前(&foo
)で関数を呼び出す必要があります。その関数は、キーと値の両方がfoo
文字列であるハッシュ参照を返す必要があります。その後、返されたhashrefのキーの値であるfoo
。を出力しますfoo
。
ここまでは順調ですね。役に立たないが、それでも楽しい。奇妙なことに、サブのパーツを削除する1 &&
と、カーリーにもかかわらずリストが返されますが、なぜそうなるのかわかりません。
私が言うならsub foo { { 'foo'=>'foo' } }
、それは参照を返します。私の場合、なぜそうではないのですか?さらに、追加するとなぜ1 &&
ですか?
perl - Perl hashref/プロパティの混乱
strict と warnings を使用している場合、これはおそらく起こらないという事実を無視して、これら 2 つのケースが異なる理由を知りたいと思います。
出力は次のとおりです。
インデックスがゼロの場合、y[0]->{name} の代入が x[0]->{name} に影響するのに、インデックスが 1 の場合は影響しないのはなぜですか?
ありがとう、
ショーン。
perl - Perl: キーと値のペアを hashref にプッシュし、参照を保持する方法
最後は次の$a
ようになります。
- /li>
最後は次の$b
ようになります。
- /li>
注: 以下を実行するのと同じです。
$b = { %$b, d=>1, e=>1 };
$a
のコピーを作成して参照を失うため、望ましくありません。
perl - Perlで1つのステップでハッシュテーブルを宣言してデータを入力します
現在、ルックアップテーブルを作成する場合は、次を使用します。
インライン初期化を1つのステップで実行する方法はありますか?(つまり、宣言するのと同時にデータを入力しますか?)