PerlからPHPへのプログラム書き換え
主な書き換えポイント
- 例を示しながら主な変更点を示します。
冒頭の宣言(プログラムソースの開始)
#!/usr/bin/perl
↓↓↓↓↓
<?php
外部プログラムソースの参照
#require "./usrdef.cgi";
↓↓↓↓↓
require_once("./usrdef.php");
useによるモジュール参照を無効にする
use strict; use CGI; use lib '.'; use Jcode;
↓↓↓↓↓
#use strict; #use CGI; #use lib '.'; #use Jcode;
変数のmy宣言を削除
#my $HTML_CHARSET = 'EUC-JP';
↓↓↓↓↓
$HTML_CHARSET = 'EUC-JP';
配列変数の宣言と値の格納
my @table_fld=("tantou_id", "tantou_name");
↓↓↓↓↓
$table_fld=["tantou_id", "tantou_name"];
正規表現による文字の置換
- サンプルは、数字以外をカットしています。
$offset =~ s/\D//g;
↓↓↓↓↓
$offset = preg_replace('/\D/', "", $offset);
文字列の前後の空白文字削除
$kword =~ s/(^\s*)(.+)(\s*)$/$2/g;
↓↓↓↓↓
$kword = trim($kword);
配列要素を指定した文字を間に入れて連結して文字列にする
my $select_fields = "\"".join("\",\"", @table_fld)."\"";
↓↓↓↓↓
$select_fields = '"'.implode('","',$table_fld).'"';
foreachの記述
foreach (@flds) { my $dada = $_;
↓↓↓↓↓
foreach ($flds as $data) {
文字コードの変換
- 利用するライブラリ等で書き方が変わる。サンプルはEUC-JPをUTF-8に変換する。Jcode.pmからmb_convert_encodingの利用に置き換え。
my $sql_r_utf = Jcode->new($sql_r, "euc")->utf8;
↓↓↓↓↓
$sql_r_utf = mb_convert_encoding($sql_r, "UTF-8", "EUC-JP");
関数はsubからfunctionへ
sub 関数名
↓↓↓↓↓
function 関数名
GETおよびPOSTのパラメータ取得
- GET、POSTを意識すること無くCGIモジュールのparamは使えていたが、その辺の配慮をして書き換える必要性がある。
my $q = new CGI; --- 中略 --- my $data1 = $q->param('data1');
↓↓↓↓↓
$data1 = isset($_GET['data1']) ? $_GET['data1'] : ""; if ($data1 == "") { $data1 = isset($_POST['data1']) ? $_POST['data1'] : ""; }
指定文字による文字列の分割
@flds = split /\t/, $strdata;
↓↓↓↓↓
$flds = explode("\t", $strdata);
ヒアドキュメントの書き方が少し違う
$sql=<<"EO_TEXT"; sample line1 sample line2 sample line2 EO_TEXT
↓↓↓↓↓
$sql=<<<"EO_TEXT" sample line1 sample line2 sample line2 EO_TEXT;
※ 終了のマークとなる文字をダブルコーテーションで囲むのは古いPHPだとエラーになります。
標準入力のデータを取り込む
- Ajax仕様でJavaScriptからまとまったデータをCGIなどに受け渡す時などに活用することがあるかな。
my $query; read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
↓↓↓↓↓
$query=""; while ($line = fgets(STDIN)) { $query .= $line; }
または、
$query = file_get_contents("php://stdin");
なお、stdinはコマンドラインの時で、CGIの時はinputを使い、次の様にする必要がある。
$query = file_get_contents("php://input");