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");