出力が”HASH(0x197fa1c)”のような場合、どう解析してけばいいでしょうか?
---------------------------------------------------------------------
#!C:\Perl\bin\perl.exe -w
use strict;
use Win32::OLE::OPC;
#変数↓
my $items_stringP1 = "PLC0"; #OPCServer のデバイス名
my $items_stringP2 = "D"; #MELSECのデバイス名称
my $items_stringP3 = 0; #先頭アドレス
my $maxcount = 1; #点数(5)
#変数↑
my $opcintf = Win32::OLE::OPC->new('OPC.Automation', 'Takebishi.Dxp');
my $group = $opcintf->OPCGroups->Add('grp');
my $items = $group->OPCItems;
my $items_stringP3_Min = $items_stringP3;
my $count = 0;
while ($count < $maxcount){
my $items_string=$items_stringP1.".".$items_stringP2.$items_stringP3;
$items_stringP3 ++;
$count ++;
$items->AddItem($items_string, $opcintf);
}
print "********************"."\n";
print $items ."\n";
print "********************"."\n";
my $key;
foreach ( keys %$items) {
print "キー値 : $key\n";
}
---------------------------------------------------------------------
出力結果:↓
********************
Win32::OLE::OPC::Items=HASH(0x197fa1c)
********************
Use of uninitialized value $key in concatenation (.) or string at C:\testPerl\OPC\OPC08.pl line 38.
キー値 :
Use of uninitialized value $key in concatenation (.) or string at C:\testPerl\OPC\OPC08.pl line 38.
キー値 :
Use of uninitialized value $key in concatenation (.) or string at C:\testPerl\OPC\OPC08.pl line 38.
キー値 :
No.4ベストアンサー
- 回答日時:
#2の繰り返しになります。
> %$itemsのキーを取得するのはではないのですね。
は正しいのですが、その取得したキーを「使っていない」のです。
http://perldoc.jp/docs/perl/5.20.1/perlsyn.pod#F …
マニュアル(の和訳)です。
> foreach ループは 通常のリスト値に対しての繰り返しを行い、変数 VAR に リストの要素を繰り返し一回に一つずつセットします。
> VAR が省略された場合には、$_ に値が設定されます。
とあります。
foreach ( keys %$items)
は、この 「VAR が省略された場合」に相当します。
ということは、リスト値 keys %$items から取り出した値は $_ の設定されています。
その $_ に設定した値を使わずに、「 $key 」を出力しようとすれば、全然違うものが出力されるのは当り前です。
また、この前にある my $key ; という文と、このforeach は「無関係」 です。
修正するなら、実行ブロック内では $_ を使うか、foreachに使う変数として$keyを指定するか、です。
my $key;
で宣言しただけでは、 $key の中身は「初期化していない値(uninitialized value)」です。
Perlの標準動作では、uninitialized valueを使って"キー値 : $key\n" 等としても、エラーになりません。
ですが、 perlに-wオプションを付けると、警告を出すようになります。
その警告が、Use of uninitialized value $key ~ です。
No.2
- 回答日時:
ちなみにエラーになっている理由は
「Use of uninitialized value $key 」(初期化されていない値 $key を使っている)
からです。
my $key;
と宣言しただけで、値を代入していません
foreach ( keys %$items) {
と、ループ用変数の指定無しにforeachを使うと、 $_ が使われます。$keyを勝手に使ったりはしません。
この回答への補足
HASH(0x****)のキーとバリューを調べたいのですが、方法がわかりません。
%$itemsのキーを取得するのはではないのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- TOEFL・TOEIC・英語検定 When the new coronavirus was spreading around the 1 2023/07/05 11:07
- Excel(エクセル) 【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて 3 2023/03/08 17:41
- YouTube youtubeからの著作権メールについて 2 2023/02/14 16:12
- 英語 Feelings: Sometimes our feelings are very strong. 1 2023/05/08 18:07
- 英語 英文の添削お願いします。【長文です。】 マッチングアプリで相手を言い負かしている時のやつです。 色々 1 2023/07/01 02:12
- 英語 英語ができる方に質問です。 以下の文がネイティブの方に伝わるかどうかを確認していただけないでしょうか 7 2022/12/16 14:54
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- iPad ipad 4 2023/03/02 21:20
- 英語 「名詞 of 名詞」において、どちらも同一人物が主体となったり所有する名詞の適切な各限定詞について 2 2022/08/18 11:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlですが、redoの処理がいま...
-
evalの使い方 引数として式を与...
-
Win98+PWS4.0でPERLが動作しま...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
文字の横にプルダウンを表示さ...
-
メモリをアドレスを直接指定し...
-
VB6で、長い時間かかる処理...
-
実行時エラー 3020の対策
-
構造体の各データの表示につい...
-
セレクトメニューで2つの項目...
-
出来ているHTMLに無料CGIをつけ...
-
pythonで演算子を変数に代入す...
-
malformed header from script....
-
formで特定のinputを送信しない...
-
Pythonを用いてCGIを作る勉強を...
-
<SELECT>タグの折り返し
-
どちのほうがすきですか?
-
少数点以下の桁数について
-
セレクトボックスの内容を中央寄せ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Perlで複数の値を返す良い方法...
-
プロトタイプ宣言のワーニング...
-
ハノイの塔の問題で困っており...
-
dieやPerl自体でエラーが発生し...
-
Net::Telnetでタイムアウト時間...
-
print <<"_HTML_"の中でサブル...
-
Net::SSH::Perlについて
-
Win98+PWS4.0でPERLが動作しま...
-
Rubyのgets関数について
-
Perlで use strict して our変数
-
[perl] next と return 同じ意...
-
Perlで自分自身の関数名を知る...
-
Pythonのプログラミングの質問...
-
icmp socket error
-
threads を使ったマルチスレッ...
-
変数に値を代入するのに、まずu...
-
これは動いてくれますか??
-
HASH(0xほげほげ)
-
10進数→2進数
おすすめ情報