1read 100read
2013年01月WebProg89: 【待望】PerlユーザのためのPHP入門 (593) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Zopeってどうよ インスタンス4つめ (383)
七行プログラミング (448)
僕にR系のシステムを売ってください (920)
RSS/RDF (666)
Zend Framework Part5 (796)
エンコード文字列だけのスレ (204)

【待望】PerlユーザのためのPHP入門


1 :03/02/27 〜 最終レス :8)
見事Perl→PHPへの脱皮に成功した俺様が
両者の違いを中心に講義してやる。
今までPerlマンセーだったやつはこれを機にPHPに変更しよう也。
質問もガンガン書いてくれ。
このPerlの文はPHPだとどう書くの?とか。

2 :
このスレ結構ありがたいかも。
>>1
ありがd

3 :
まず、両者には似てる部分も非常に多いというのは特徴だ。
例えば変数の宣言、初期化をしてみよう。
$foo = 0;
頭に$をつけるところも、型を特に指定する必要がないことも、
文末は;になることもみんな一緒だ。
ほら、簡単に移行できそうに思えてきただろ?

4 :
とりあえずHello, world!を出力してみるぞ。
<?
print "Hello, world!\n";
?>
printの意味はperlと一緒だ。
まあ、printよりecho使う人が多いがそんなに違いはない。
perlユーザならわかりやすい方が(・∀・)イイ!だろう。
プログラムの開始と終了は<?と?>で囲むんだ。
これはPHP特有だから早く覚えよう。
<?じゃなくて<?phpで囲んでもOK。将来XMLとの連携を考えるなら
後者で書く癖をつけたほうが良いとは言われている。

5 :
↓↓↓↓↓★ココだ★↓↓↓↓↓
http://www.pink-angel.jp/betu/index.html

6 :
PHPでrequireするファイルは必ず<?php ?>で囲まなきゃダメ?

7 :
とりあえずCGIじゃなくてmod_phpを使っていこう。
例えばCGI/Perlの場合、
#!/perl/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!\n";
簡単なテストスクリプトを書くときも2行目あたりのウザイのを
書く必要があったがmod_phpならそんな必要はない。
とにかく<?と?>で囲めばOKだ。
というわけで課題として、各自ローカルサーバにPHPをインストールしておこう。
PerlユーザならApacheはインストールしてあると思うのでそれを前提とすると、
http://www.php.net/downloads.php
上記サイトにある
Windows Binaries
PHP 4.3.1 zip package [5,853Kb]
を落とすのじゃ。下のPHP 4.3.1 installerの方が楽そうに見えるが
こっちはCGI/PHPとしてしか使えないから駄目。間違えるなよ。

8 :
>>6
どういう用途で用いるのか知らんが
PHPスクリプトをrequire()するなら当然
そっちも<? ?>は必要だぞ。
まあ、聞くより自分で確かめたほうが早いだろう。

9 :
PHPのインストールについては
詳しく解説しているところを見たほうが早いか。
始めたばかりの頃俺が参考にした所だ。
http://www.php-j.com/tutorial/install/win.php
では各自ローカルでPHPを動かせるようにしておきましょう。
その瞬間からPerlとはおさらばだ!

10 :
俺様、がんがれよ。

11 :
win用をインスコしたいのですが
ここ以外にバイナリって無いんですか?
http://www.php.net/downloads.php

12 :
>>11
そこのじゃ嫌なのか?
そこからで全然問題ないと思うが。

13 :
おお,このスレはありがたい.がんがってください.

14 :
期待age

15 :
CGI/Perlの場合は
能や予、表などの漢字を使うときに文字化けしないように
\能、\予、\表みたいな面倒な書き方をする必要があっただろう。
PHPでは大半の人がEUCの日本語コードで記述していて
そのような必要はない。
と、言うわけでEUCを読み書き・保存できるエディタを用意しておきましょう。
例えば、Windows標準のメモ帳では無理です。
まあ、ベクターとかでEUCって検索すればすぐに見つかる。
http://channel.goo.ne.jp/download/search/search.php3?MT=euc&CD=1&SW=1&OS=3&category=1&search_num=10
シェアウェアのものでよいならば秀丸やEmEditorがお奨め。

16 :
質問なんですけど、
関数の引数にハッシュを使う方法ってありますか?
function func($key,$value){
return "$key => $value";
}
$result = func("key"=>"value");
みたいにやりたいのですが
Parse error: parse error, unexpected T_DOUBLE_ARROW
というエラーがでました。
function func($key=>$value){
return "$key => $value";
}
でも無理でした。

17 :
>>16
PHP固有の質問はこっちへ書き込もうぜ。
【PHP】質問スレッド Part7
http://pc2.2ch.net/test/read.cgi/php/1044478561/l50

18 :
(PerlCode)
$name="john";
$say=sub{return "My name is $_[0].";};
print &{$say}($name);
はPHPで書くとどうなりますか?

19 :
>>18
俺のPerl自慢。
                  つづく

20 :
>>18
<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>

21 :
そんなもんをXHTMLに埋め込んだら、見苦しくて死ぬぞ。
ブラウザでパースもできんようになるし。
MVCにしろや。

22 :
>>20
お答えサンクス。
と、いうわけでもうインストールはばっちしだと思うので
今日はユーザー定義関数についてから話そう。
超独自仕様のPerとの大きな違いの1つだ。
まあ、はっきり言っちゃえば
>>18みたいな書き方はPerlではごく普通だが
Perl知らない人から見れば何なのかさっぱりってほど特殊だ。
それに比べてPHPの>>20は他の言語
(例えばJavaとか)しか知らない人が見ても何となく理解できるだろう。

23 :
>>20
レスどうもです。
無名サブルーチンみたいなのが使いたいなと思っていたのですが、
create_function関数というのがあるみたいですね。
http://www.php.net/manual/ja/function.create-function.php
<?php
$name="john";
$say=create_function('$name','return "My name is $name.";');
print $say($name);
?>

24 :
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200
PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。

25 :
いちいち引数を書くとは面倒になったと言う人もいるだろうが、
おかげでデフォルト引数を簡単に実現できる。
<?php
function foo2($a ="俺様") {
print "$a は凄い<br>";
}
foo2("お前");
foo2();
?>
/*
お前 は凄い
俺様 は凄い
*/
引数を指定しなかったら勝手に俺様が凄くなってくれるのだ。

26 :
講座スレ作ろうとする奴って大体理論が崩壊してるよな・・・。

27 :
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200
PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。

28 :
これかいてる間に重要なこと思い出した。
#Perl code
$a=26;
print "$aゲット";
#26ゲット
-------------
#PHP code
$a=26;
print "$aゲット";
#(何も表示されない)
----------------------
両者にはこのような違いが起きてしまう。
下はどうすればよいのか各自考えてみましょう。
出かけるので解答は夜で。

29 :
26ゲットできなかったヽ(`Д´)ノ

30 :
>>26
俺様はPHP歴浅いので
崩壊どころか理論自体形成されていない。
だからこのスレタイは入門だ。
間違いはがんがん指摘してクレイ!

31 :
>>30
俺はPHPすら分からない。
だから、がんがん解説してクレイ!

32 :
結構見やすいPerl/PHPの構文比較のページ見つけました。
Perl/Php Translation
http://www.cs.wcupa.edu/~rkline/perl2php/
既出だったらゴメン。

33 :
>>32
それは便利だな。
では今後はそこに載ってないやつを指摘していくことにしよう。

34 :
>>18
<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>

35 :
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200
PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";

36 :
>>28
変数名の後ろは全角文字でもダメみたいですね。
(半角の「.」はOKだった)
#PHP code
$a=26;
print $a."ゲット";
#26ゲット
#PHP code
$a=26;
print "$a.ゲット";
#26.ゲット

37 :
>>28
print "${a}ゲット";
print $a."ゲット";
echo $a,"ゲット";

38 :
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200
PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
Perlでは関数でなくサブルーチンと呼ばれていたな。
sub foo {
print "$_[0] ";
 

39 :
シフトJISでがんがん書いてます。

40 :
>>36
  _n
 ( l    _、_
  \ \ ( <_,` )
   ヽ___ ̄ ̄  )   グッジョブ!! 
     /    /
>>37
   _、_
 ( ,_ノ` )      n
 ̄     \    ( E)  グッジョブ!!
フ     /ヽ ヽ_//


41 :
些細なことに見えるが、
自分はこのせいで某スクリプトを
PerlからPHPに移植する際に、
30分ぐらい睨めっこした記憶があるので。
頭の中に入れて起きましょう。
$a=26;
print "{$a}ゲット";
print $a."ゲット";

42 :
先生質問です。
>>9の通りしましたがapacheが起動できません。
どうやらhttpd.confのLoadModule php4_module C:/php/sapi/php4apache.dllが原因のようです
php4apache.dllをphp4apache2.dllとしても同じでした。
WinME Apache2.0.39です

43 :
>>42
OS側類。

44 :
>>42
Apacheは2よりも1.3.27の方がいいと思う。
後はなんだろな〜
Meなんて怪しいOS使ったことないからな。
とりあえずApacheのバージョンを変えて試してみてクレイ。

45 :
>>44
ありがとうございます。1.3.27を使ったら起動できました。

46 :
 |  | ∧
 |_|Д`) < それだー!!
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄ ̄
 |  | ∧
 |_|Д`) < それだー!!
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄ ̄
 |  | ∧
 |_|Д`) < それだー!!
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄ ̄
 |  | ∧
 |_|Д`) < それだー!!
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄ ̄
 |  | ∧
 |_|Д`) < それだー!!
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄ ̄

47 :
>>44
OS = Windowsとか思っている痛い講師がいるクソスレはココですか。

48 :
>>47
世の中は理詰めだけでは解決しない。
理論ヲタになるより、わかりやすさを求める方が現実的だ。
わかるかい?
しかも、PHPと直接は関係ない。
君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
では、今日はいよいよ変数のスコープについての説明だ。
あくまでも対象者は基本的に『Perlしか』やったことがない人のみ。
C言語など他の言語をやっている人には馬鹿見たく思われる説明になるからだ。

49 :
>>48
>君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
少なくとも数学者を目指す文学者がマクローリン展開を知らなければバカにするが。

50 :
>>49
俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
#Perlscript
sub foo{
$a = 100;
print "$a,";
$a++;
}
&foo();
print $a;
#100,101
まあ、当たり前の結果が表示されます。
これをPHPに書き換えてみましょう。

51 :
#PHPscript
<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
# 100,
何故か100しか表示されません!?( ̄□ ̄;)ナント!!
どうして後ろの$aは表示されなかったのでしょうかという問題です。

52 :
同様の例です。
#Perl
sub hoge{
print $a;
}
$a="俺様";
&hoge;
----------
#PHP
function hoge(){
print $a;
}
$a="俺様";
hoge();
Perlの方だと見事、俺様と表示されるのですが、
後者の方は何も表示されないので吃驚仰天です。

53 :
>>50
>俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
いや、エンジニアでなくても車=ベンツとか思ってる奴はアホなわけで。
教養ではなく常識なのよ。常識。

54 :
>>53
邪魔。キエロ

55 :
>>54
どうしていつものコテハンを使わないんですか?

56 :
>>55
ごめんごめん。かんじよめないんだ?
ジャマ。キエロ

57 :
>>54,>>56
(・∀・)カエレ!!
せっかくこのスレを良い感じにしたいのだから
煽りはよそでやってクレイ。

58 :
>>53
まあ、教養が無かった俺様が厨ってことで
その話題は終わりにしよう。スレ違いだし。

59 :
↓↓↓↓↓★ココだ★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html

60 :
>>50-51
Perlがデフォルトでグローバル変数なのに対して、
PHPでは、デフォルトでローカル変数だから。
#PHPscript
<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>

#Perlscript
sub foo{
my $a = 100;
print "$a,";
$a++;
}
&foo;
print $a;
と同じ
#始めたばかりなので全く同じかどうかとか用語の使い方は正しくないかもしれません

61 :
#PHPscript
<?php
$a = 999;
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
#100,999
なーる。

62 :
>>60
(*゚▽゚ノノ゙☆パチパチ
Perlにおいていわゆるmyを付けた場合が
PHPでは標準になっています。
C言語などの場合はコンパイル時に
未定義(未宣言)の変数だ!ってエラーを出してくれるのですが、
PHPではそのまま初期値(文字なら空白、数字なら0)として
認識してしまうので注意しましょう。
結構すんなり受け入れられるのかなー?
普段からmyを使ったりしている人なら問題ないだろうけど
プログラミング言語をPerlしかやってないでグローバルなのが当たり前だって
思ってた人には受け入れるのに時間が掛かるかもしれない。
そんなことないか?どうだろう。

63 :
Perlってなんて読むの?

64 :
逆にPerlの標準のようにグローバル(大域)変数として
扱いたい場合も書いておきましょう。
これはCやJavaとも違う仕様ですね。
関数内の最初でglobalと宣言します。
なお、PHPの設定でregister_globalsをonにすると
また違うようなのですが、デフォルトはoffで推奨となっているのでそれに従います。
<?php
$a = 999;
function foo(){
global $a; //これでグローバルスコープの$aを参照しますよと宣言している。
print "$a,";
$a++;
}
foo();
print $a;
?>
#999,1000
因みに、function foo()はどこに書いてもOKです。
(PHP3だったころは駄目だったとか・・・)
>>63
[p:(r)l]

65 :
Perlには静的(スタティック)変数が無かったと思うので
それについても書いておきましょう。
function foo(){
static $a=0;
print $a;
$a++;
}
for($i=0;$i<5;$i++){
foo();
}
#01234
このようにすると
最初にfoo()が呼ばれたときのみstatic $a=0が呼ばれてくれるのです。
以降、foo()が呼ばれるたびに$aは1ずつ増加してくれます。
staticをつけないと毎回0が出力されてしまいますね。
変数のスコープは関数内のみなのに値を保持していてくれるわけです。
globalでは無いので関数外部から直接$aの値をいじることは出来ません。

66 :
perlの use strict; のような未定義変数をチェックする方法はPHPに無いのでしょうか。

67 :
{
my $static = 0;
sub foo () {
return ++$static;
}
}

68 :
だめだ・・・functionの時点でわからそ。

69 :
>>66
すまんが俺様は知らんな。
全ての定義済の変数を配列で返すような
関数ならあるが。
<?php
$def_arr= get_defined_vars();
//初期設定(_SERVER["SERVER_ADDR"]のようなもの)
//を含む全ての定義済みの変数の配列を得る)
$a=3;
$abc=10;
$arr = get_defined_vars();
//初期設定のものに上の2つが追加された。
$new_arr = array_diff($arr,$def_arr);
//2つの配列の差を得る。
print_r($new_arr);//配列の内容を出力
?>
#Array ( [a] => 3 [abc] => 10 )

70 :















71 :
>>67
なるほど。Perlでstaticを実現した例ですね。
まあ、PHPの場合はわざわざ自前で作らなくても
最初からstaticという命令が用意されているということです。

72 :
>>68
Perlをある程度理解していれば
わかるようにしたいのだが、
(Perlも未経験という場合はちょっと厳しいです。)
どこら辺がわからんだろうか?
とりあえずPerlのsubをfunctionに置き換えちゃえばOKだ。

73 :














 

74 :
>>69
どもども。
ちょっと面倒ですね。

75 :














76 :
>>66
error_reporting(E_ALL);
でどうかな。

77 :













     

78 :
<?php
error_reporting(E_ALL);
print $a;
?>
#<b>Notice</b>: Undefined variable: a in <b> (filename)
# </b> on line <b>3</b><br />
>>76
ありがとう。うまくいきました。

79 :














80 :
>>76
(・∀・)イイ!
φ(.. )メモシテオコウ
error_reporting(E_ALL);

81 :
あいだに空を入れる人生。色即是空(w

82 :















83 :
よっしゃ!早くも寂れてきたぞ。今日は配列について書いておこう。
まず、Perlの場合配列値を表す変数は先頭が$でなく@になっていた。
しかしPHPではそんな面倒なことはない。どんな場合でも先頭は$でOKだ!
凄い楽そうだろ?(祝
初期化の差はこんな感じだ。
#Perl
@a = (20,10,30,3);
#PHP
$a = array(20,10,30,3);
arrayって余計な文字が付いたが細かいことは気にするな。

84 :
驚くことにPHPでは
$a[] = "a";
$a[] = "b";
$a[] = "c";
$a[0] = "a";
$a[1] = "b";
$a[2] = "c";
この2つが同じ意味となるのだ。
角括弧内の数字を省略した場合、
値は配列に最後の要素として勝手に追加してくれる。
まあ、こういう独自仕様は混乱の元だから俺は上の形式で書いたことは無いがな。
わかった上で使うなら利用場面は結構多いかもしれない。

85 :
↓↓↓↓↓★ピンクエンジェル★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html

86 :
配列の関数一つ一つ説明するのは面倒だから
あとは>>32のサイトや公式のマニュアルでも読んでくれ。
Perlで実現できてたことの代替手段は大体存在してる。


87 :
多次元配列は一つ注意を。
これは前も似たようなこと言ったが
$a[0][1] = 41;
print "$a[0][1]";
Perlだと期待する結果41が出力されるが、
PHPだとArray[1]という怪しげな結果が出力されてしまう。
後ろの[1]はただの文字列として認識されてしまっているようなのだ。
以下のどちらかにしないといけない。
$a[0][1] = 41;
print "{$a[0][1]}";
print "".$a[0][1];

88 :
まあ、おかしくなったらまずは変数を{}で括ってみろってことだ。

89 :
@a{qw(a b c)} = @b[1..3];
こういうのはどう書く?

90 :













91 :
>>89
うーん、よくわからんな(汗
誰かわかる人募集中だ!
まあ、とりあえず根性で全部書いておけ。
$a = array(
"a" => $b[1],
"b" => $b[2],
"c" => $b[3],
)

92 :
なんで、空投稿するんだよ。見ずらいんだよ。

93 :
日本語すら満足に書けない俺様が講師のクソスレはここですか?
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。


94 :
ねちっこいね。うざいというかきもい。

95 :
  ∧_∧
 ( ´∀`)<きもい。きもい。
 (     つ
 (_○___)

96 :
見づらいんだよ。でした。すまん。
俺は「俺様」じゃないです。

97 :
普通に見てる人もいるんで、煽ってるやつらマジでどっかいって。

98 :
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 :
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
僕にR系のシステムを売ってください (920)
【Apache】mod_rewriteについて語るスレ (641)
Blog/Wiki関連技術総合 (351)
セキュリティースレッド (243)
OpenPNE その6 (571)
くだらない質問でも偉そうに聞いていいスレ (432)
--log9.info------------------
志村正彦 PART4 (695)
【夜】 裸のラリーズ LesRallizesDenudes 【48】 (630)
【古賀森男】フェビアン【元レベッカ】 (227)
小沢健二の作詞能力2 (353)
アベフトシ(`皿´)後援会15 (464)
@@@ザ・モップスPART2@@@ (491)
 J・A・シーザー  (867)
【誤記鰤婆】ジャパメタストーカー・苺大福5【逆ギレ乙】 (728)
ギター★田中一郎 2★ラーメン (643)
【ありふれた】+DEEP+ part2【週末に】 (554)
HystericBlue★15 (567)
hideの交遊録 (386)
hide with Spread Beaver (513)
TOSHI 275 (882)
【もう魂は】A.R.B パートV【こがしません】 (897)
愛を語るより上杉昇&柴崎浩を語ろう (241)
--log55.com------------------
非常事態宣言出されたら競馬はどうなるの?
【朗報】オルフェーヴル、種牡馬リーディング3位に再浮上
フェブラリーS14着→高松宮ビリ→大阪杯ビリの騎手...
マカヒキを引退させない理由
緊急事態宣言 確定か
◆◆武豊・優先主義 Part2540◆◆
安倍総理の私邸訪問した26歳の女の行動力何気にすごくね?
緊急事態宣言、8割が賛成