dポイントプレゼントキャンペーン実施中!

出力が”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.
キー値 :

A 回答 (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 ~ です。
    • good
    • 0

#2 に書かれていることは理解できていますか?

    • good
    • 0

ちなみにエラーになっている理由は


「Use of uninitialized value $key 」(初期化されていない値 $key を使っている)
からです。

my $key;
と宣言しただけで、値を代入していません
foreach ( keys %$items) {
と、ループ用変数の指定無しにforeachを使うと、 $_ が使われます。$keyを勝手に使ったりはしません。

この回答への補足

HASH(0x****)のキーとバリューを調べたいのですが、方法がわかりません。
%$itemsのキーを取得するのはではないのですね。

補足日時:2014/11/29 21:23
    • good
    • 0

「解析」って, 具体的には何をしたいんでしょうか?

この回答への補足

HASH(0x****)のキーとバリューを調べたいのですが、方法がわかりません

補足日時:2014/11/29 21:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!