• ベストアンサー

PerlからPHPへ移行したときの注意事項は

PerlからPHPに移りまして、戸惑うことがあります。 Perlでは、 use strict; my $hensuu = 1; とレキシカル変数としなければ、変数未宣言となり スペル間違いの変数の使用が避けられるのですが、 PHPでは、 $hensuu = 1; と、何の設定もなく、利用時に $hensu += 0; としても問題なく動作します。 これって危険なのですが、みなさんはどう対処していますか? あと、PerlからPHPにソース移行する場合に 気をつけないことがありましたら、教えてください。

  • PHP
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

error_reporting を設定することで警告を出力させることができます。 http://jp.php.net/manual/ja/function.error-reporting.php 例えば、 error_reporting (E_NOTICE); print $testvalue; の様にすれば Notice: Undefined variable: testvalue in … のように警告が出力されます。(初期化されていない変数を使っている。初期化されている場合には、でない。my のようなものがない。スペル間違いによる変数の使用はこれでチェックできる。) php.ini でも設定できます。

その他の回答 (1)

回答No.1

Java・PHPを先に学びPerlを学んだものです。 ※独学ですが・・・ 元々他人が作ったシステムゆえ、 ソース解析から行いましたが、 その際、一番苦労した点は、 ・関数の呼び出し ・省略形 です。 私が担当したPerlのソースは、 関数の呼び出しに「->」を使用しておりました。 しかし、Java・PHPでは「関数名()」でしたので、 ソースの解析に非常に苦労しました。 また、Perlでは「省略こそが美徳」という文化があるみたいで、 省略されていることが分からず、 こちらも非常に苦労しました。 質問者様とは逆のパターンですので、 参考程度に留めてください。

関連するQ&A

  • strictなPHP

    PHPではPerlで言うところの use strict に相当するものはあるのでしょうか? (変数宣言しないでコーディングできちゃうのが何か気持ち悪くて…)

    • 締切済み
    • PHP
  • Perlの XMLin()はPHPではどうなるのでしょうか? PerlからPHP part3

    Perlの以下のソースをPHPに置き換えた場合、 どのように書くのが一般的でしょうか? PHPは4.3系を使っています。 # Perl use XML::Simple; my $xml = XMLin( $content ); my $namae = $xml->{NAMAE}; PHPとXMLのお勧め本も知りたいです。

    • ベストアンサー
    • PHP
  • perlのリファレンス?はPHPではどうするのでしょうか?

    以下、Perlのソースですが、これをPHPに直すとどうなるのでしょうか? use strict; use warnings; use Data::Dumper; my $Name = "テスト"; my $Width = "100"; my $Height = "200"; my $dat = [ $Name, { Width=>$Width, Height=>$Height, } ]; print Dumper($dat); sub test{ my ($aryref) = @_; $$aryref[0]{$Name}{"Width"} = $Width; $$aryref[0]{$Name}{"Height"} = $Height; } my @OBJ = (); test(\@OBJ); print Dumper(@OBJ);

    • 締切済み
    • PHP
  • use strictが効かない (PERL)

    たびたびお世話になっております。 PERL version 5.14.2 をWindows 7 のコマンドプロンプトから起動して使っています。 use strict; と一行目に書くと 宣言されていない変数があれば拒絶されるとのことで #!/usr/bin/perl use strict; use warnings; $a = 10; print "$a\n"; というスクリプトを書きました。が、すんなり動いてしまいます。 use strict; は どうすればうまく効くのでしょうか。 ご指導お願いします。

    • ベストアンサー
    • Perl
  • perl use strict エラーにならない?

    perlの使い方を勉強しているのですが use strict;を記述すると 変数宣言が必要になるということですが 以下のように記述してもエラーになりません。 use strict;を記述すると my $a;がないと$a="Hello";で エラーになるのではないのでしょうか。 ---test.pl---- use strict; $a="Hello"; print $a; -------------- >test.pl Hello > (Windows7, ActivePerl)

    • ベストアンサー
    • Perl
  • Perlの変数宣言について

    PHPを毎日書いている者ですが、たまたまPerlのメールフォームをカスタマイズ しなければならなくなりました。 use strict宣言がある場合、変数はmyまたはlocalで宣言しなければいけないようですが、 サブルーチン内に sub form { ・・・ my ($form_value,$error_list) = @_; ・・・ print $error_list{'inquiry_type1'} としたところ、 Global symbol "%error_list" requires explicit package name at ・・・ と、宣言が無い場合に出るというエラーが出ました。 $error_listには、inquiry_type1は入っているはずなのですが、どのような 宣言をすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • PerlからPHPへ移行 Part2

    以下、Perlのソースですが、これをコメントどおりに PHPに直すとどうなりますか? Time::Localは ppm install Time-Localでインストールできます。 use strict; BEGIN{ # BEGINはPHPで $|=1; # バッファリングしない } use Time::Local; #PHPでUseは? sub test_date_time{ my ($year, $mon, $mday, $hours, $min, $sec) = @_; # 可変引数な方法 my $serial = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); my $moji = sprintf("$year年$mon月$mday日 $hours時$min分$sec秒"); return ($serial, $moji); # 複数の戻り値で様々な型で返す方法 } my ($serial, $moji) = test_date_time(2006, 10, 2, 10, 25, 30); # 一度に受け取る方法 print q{シリアルは} . $serial . "\n"; #q print qq{文字列は$moji\n}; my $ptn = qr{^(.+?)年(.+?)月(.+?)日\s(.+?)時(.+?)分(.+?)秒$}; if($moji =~ /$ptn/i){ print "$1/$2/$3 $4:$5:$6\n"; } exit(0); # 結果 #シリアルは1159752330 #文字列は2006年10月2日 10時25分30秒 #2006/10/2 10:25:30

    • ベストアンサー
    • PHP
  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl
  • PerlでmyというものがありますがPHPではなにになりますか

    Perlではローカル変数の定義でmyをつかいますが、 PHPではなにになるのでしょうか。 また、staticとありますが、これはどういう意味なのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう