2016-06-21 31 views
0

私はPerlでの経験が全くなく、PHPでも初心者です。 Perlを使って古い会社のシステムをPHPを使って新しいシステムに移行する必要があります。ここで私は理解していないPerlでのいくつかのコードは次のとおりです。perlからphpに移行する

while (my $data=$query->fetchrow_hashref) { 
     push @oid_list, $data->{oid}; 
     push @{$snmp_order->{$sensor}}, $data->{function}; 
     $oid_hash->{$sensor}->{$data->{function}}->{oid}=$data->{oid}; 
     $oid_hash->{$sensor}->{$data->{function}}->{scale}=$data->{scale}; 
    } 

誰かがコードはどういう意味し、それがPHPにどうなるのか説明できますか?また、$a->{$b}はPerlで何を意味しますか?

私は3日からそれを理解しようとしていましたが、まだそれに対処するのが難しかったです。私はPHPを使用していないが、私は一般的に、コードを説明しようと

+0

それを開発した人に質問してください。 –

+0

@CaelanGrgurovicあなたは過去に何をしていたのか分かりませんが、元のプログラマーがもはや手伝ってくれることはあまりありません。 –

+1

[perlreut](http://p3rl.org/perlreftut)、[perlref](http://p3rl.org/perlref)、 [perllol](http://p3rl.org/perllol)、[perldsc] (http://p3rl.org/perldsc)。 – choroba

答えて

3

# while there is data in the object that is returned by calling the method "fetchrow_hashref" of the object $query: it means, get a single data row from the database 
while (my $data=$query->fetchrow_hashref) { 

    # add the value stored in field "oid" from the hash "data" to array "oid_list" 
    # what is hash? kind of array indexed by strings. Red more about hashes here: http://perlmaven.com/perl-hashes 
    push @oid_list, $data->{oid}; 

    # add the value stored in field "function" of the hash "data" to 
    # an array that is found in a reference, which reference is stored in hash "snmp_order" under 
    # a field that is named the same as the value of variable $sensor 
    push @{$snmp_order->{$sensor}}, $data->{function}; 

    # now: the data->oid is added to oid_hash. I will use array notation to explain where it lands: 
    # oid_hash[$sensor][$data->{function}][oid] = $data->{oid} 
    $oid_hash->{$sensor}->{$data->{function}}->{oid}=$data->{oid}; 

    # oid_hash[$sensor][$data->{function}][scale] = $data->{scale} 
    # $sensor and $data->{function} are variables! 
    $oid_hash->{$sensor}->{$data->{function}}->{scale}=$data->{scale}; 
} 

あなたはPerlの詳細を読むことができますが(私は自分自身を繰り返す)ここで例えば、ハッシュ:http://perlmaven.com/perl-hashes

+0

ああ、あなたはもっと速かった: – Otterbein

+2

これ以上の視点を持つことは良いことだ:) – Piotr

+0

ありがとう! @Piotrが本当に助けてくれた –

3

まあ、私はPHPプログラマーではないので、私はちょうどあなたがperlコードの意味を教えてくれるでしょう。たぶんそれはもう少しあなたを助けます!

#an query to the Database was fired through the DBI-module from Perl 
#the result is temporarily stored in the $query but has to be fetched 
#before further use. Since the result could contain multiple rows the $data 
#is filled with each row while the ->fetchrow_hashref() function returns a hash of 
#data representing one returned row of the query. The keys of the hash are the column 
#names of the database-table 
while(my $data = $query->fetchrow_hashref){...} 

@は、Perlの配列を示します。したがって、@oid_listは1として扱われます。したがって、値$data->{oid}をその中にプッシュすることが可能です(push @oid_list, $data->{oid})。

構文$data->{oid}は少し複雑です。例えば、$dataがハッシュ(またはMapと呼ばれるjavaのような他の言語)へのの参照(単にポインタ)であるとします。しかし、の後ろのハッシュにアクセスしたいと思っています。だから->参照してを参照し、$dataを指している実際のハッシュにアクセスします。 $data->{oid}によって、Hashreferenceby $dataのキーの背後にある値oidにアクセスします。

同様のことがpush @{$snmp_order->{$sensor}}, $data->{function};で発生します。しかし、ここでは最初に参照$snmp_order->{$sensor}の背後にある実際の配列にアクセスしなければなりません。ここで参照されているハッシュのキーには、配列参照が含まれており、値$data->{function};が入力されています。

残りのコードは、この2つの種類のものです。プログラマはフェッチされたデータベース行$dataから異なる値を大きなハッシュリファレンス$oid_hashの異なるキーに割り当てます。 {}には、アクセスされるキーの名前が常に表示されます。

関連する問題