![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
出力が”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ランキング
-
foreach 回数制限
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
セレクトメニューで2つの項目...
-
メモリをアドレスを直接指定し...
-
文字の横にプルダウンを表示さ...
-
テーブル内でドロップダウンメ...
-
[Ruby] irbにおける文字化け
-
数値かどうかの判定方法
-
実行時エラー 3020の対策
-
エクセルVBA シート名の部分一...
-
変数名に変数を使用
-
formで特定のinputを送信しない...
-
phpでボタンを押したときに変数...
-
Python - Excel で Webからデー...
-
文字のカラーとフォントの指定...
-
子windowsからsubmit()後にclos...
-
【至急!!!】python言語で本を見...
-
FindFirst を複数条件で検索
-
16進の10進変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Perlで自分自身の関数名を知る...
-
Net::Telnetでタイムアウト時間...
-
print <<"_HTML_"の中でサブル...
-
Rubyのgets関数について
-
10進数→2進数
-
CGI初心者です
-
Perlで複数の値を返す良い方法...
-
作業域が消える(ように見える)
-
検索機能の作成で困っています
-
Pythonのマルチプロセスでの並...
-
ハノイの塔の問題で困っており...
-
LISPで連想配列の操作?
-
PERLの「!=」と「=~」 or...
-
PerlでCabochaを呼び出すには(...
-
foreach 回数制限
-
シェルでawkを使い行数を取り出...
-
Wコロン
-
HASH(0xほげほげ)
-
プロトタイプ宣言のワーニング...
おすすめ情報