
出力が”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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
テキストファイルで提出とは?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Pythonのプログラミングの質問...
-
Perlで use strict して our変数
-
プロトタイプ宣言のワーニング...
-
Perlで自分自身の関数名を知る...
-
dieやPerl自体でエラーが発生し...
-
内部処理形式が日付型 (Date) ...
-
Pythonのマルチプロセスでの並...
-
HASH(0xほげほげ)
-
10進数→2進数
-
Telnetモジュールで繋がりません。
-
数値の多い順に別々の処理をす...
-
Perlで複数の値を返す良い方法...
-
Perlで足し算をするには
-
[perl] next と return 同じ意...
-
親ループのループ変数$_を子ル...
-
Net::SSH::Perlについて
-
PerlでCabochaを呼び出すには(...
-
Perlのプログラミングに困って...
-
JSONで文字列が長い時
おすすめ情報