#topicpath
----
//ここにコンテンツを記述します。
***Perl覚え書き
私は初めてまともににさわった言語はJavaだったので、他の言語のことはほとんど知りません。でもMovableTypeとかPerlだし、知ってて損はないかなぁってことでPerlの学習を始めてみました。((でもまだPerlのような軽いタッチ(?)の言語になじめませんっ))

で、とりあえず、こんな書き方ありなんだーってのをメモしてます。
(人に見せるもんじゃないですね)

***いろいろ1
 #!/usr/bin/perl -w
 
 //mainパッケージの宣言
 package main;
 
 $bar = '$bar is in main package';
 
 {
 	//これによって、この括弧内はhogeパッケージとなる?
 	package hoge;
 	$bar = '$bar is in hoge spackage';
 	print $bar, "\n"; <-自分のパッケージ内の変数へのアクセス
 	print $hoge::bar,"\n"; これと同じ意味。
 	print $hoo::bar,"\n"; <- これはエラーになっちゃう
 }
 
 {
 	package hoo;
 
 	$bar = '$bar is in hoo package';
 	print $bar, "\n";
 	print $hoge::bar,"\n"; <-これはエラーにならない
 }
 
 print $bar ,"\n"; <-これはmainパッケージのbarへのアクセス

***いろいろ2
 #!/usr/bin/perl -w
 
 package hoge;
 
 {
 	$bar = '$bar is in hoge spackage';
 	
 	print $hoge::bar,"\n";
 }

***いろいろ3(これはよくわからん)

 
  
 #!/usr/bin/perl -w
 
 package hoge;
 
 {
 
 	$bar = '$bar is in hoge spackage';
 
 	print $hoge::bar, "\n";
 
 	sub new {
 		my $pkg  = shift;
 		my $hash = {
 			name   => shift,
 			weight => shift
 		};
 		bless $hash, $pkg;
 	}
 }

***moduleってなんなの
Perlって *.plとか*.pmとかあって、どうもmoduleってのは*.pmってやつなんでしょうか。
どうも*.pmってやつ(=module?)がクラスの様なものに見えます。[[とあるサイト:http://www.pure.co.jp/~learner/program/Perl_oo.html]]にあるサンプルの中身を見てみると、たとえば
 (HelloModuleWorld.pm)
 package HelloModuleWorld;
 
 sub new {
   my $pkg = shift;
   bless {},$pkg;
 }
 
 sub Japanese{
   return 'こんにちは、モジュールの世界へ!';
 }
 
 sub English{
   return 'Hello, Module World!';
 }
 
 1;

こんなんなってるし。
これをカレントに保存して、
 (Hoge.pl)
 #!/usr/bin/perl
 
 package main;
 
 use HelloModuleWorld;
 
 my $obj = HelloModuleWorld->new;
 
 print $obj->Japanese;
 print "\n";
 print $obj->English;
とコーディングしてプロンプトから
 perl Hoge.pl
とすると、オブジェクトっぽく呼び出すことが出来ました!

どうも、Perlの世界のパッケージってのは、Javaでいうところのpackageではなく完全修飾のクラス名のことなのかなぁ。。。でもコンストラクタ(new関数)の
 my $pkg = shift;
 bless {},$pkg;
ってなに??なんか、奥が深いですねぇ。









----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS