【最大10000ポイント】当たる!!質問投稿キャンペーン!

->
という矢印演算子が勉強しているスクリプト中に出てきて書籍などで調べたのですが、
よく分かりませんでした。
連想配列で便利な面がある?のでしょうか?
何かを省略できる書き方ということでしょうか。

my $cgi=CGI->new;

if($anct>$articleperpage){
if($cgi -> param('offset')){
$offset=$cgi->param('offset');

という具合にまだまだ続きますが、
矢印演算子が使われています。

アドバイス宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんばんは、shevy さん。

いつぞやは混乱させてしまったみたいで、ごめんなさい。
ハッシュ(連想配列)の解説はもっと丁寧に正確に行うべきでした。m(__)m

さて、この矢印は Perl5 で導入された「オブジェクト指向」機能を使って
オブジェクトとメソッドを関連づける表記です。

>my $cgi=CGI->new;
new というメソッドで CGI クラスのオブジェクト(インスタンス)を
生成して局所変数 $cgi に格納します。
この new のことはコンストラクタ(オブジェクトを構築するものの意)といいます。

>$cgi->param('offset');
$cgi に格納されたオブジェクトに対して param メソッドで
'offset' パラメータの値を取り出します。

こう書くと難しく感じるでしょうが、オブジェクトは自分自身いろいろな属性を持っていて、
ただの変数よりずっとお利口さんなのです。オブジェクトは自分のやるべきことを
知っていて、メソッドという「メッセージ」を受け取ることで
そのメッセージに応じた振る舞いをすることができます。

さっきの「$cgi->param('offset')」で言えば、こちらが
$cgi の中のオブジェクトに対して「おい、'offset' パラメータの値は何だっけ」
と呼びかけると、オブジェクトはそのメッセージに応えて値を返すということです。

詳しくは参考 URL をご覧ください。

参考URL:http://www.pure.ne.jp/~learner/program/Perl_oo.h …
    • good
    • 0
この回答へのお礼

nightowlさん、ご丁寧にありがとうございます。
いえいえ、こうしてcgiカテゴリーに
何度も質問してお助けいただいている、
私の名前まで覚えていただきまして、
こちらが恐縮してしまいます(^^;;;
本当に感謝しております。

ご回答の件ですが、
なるほど、オブジェクト指向の記述だったんですね。
早速、ご紹介のURLをじっくりと読み解こうと思います。
ただ、まだPerlでオブジェクト指向と聞くと、
想像ができないだけに、いまから楽しみです。
Perl5からそういえば、オブジェクト指向が導入されたような記述を書籍で観たことがありました。

もっとがんばってPerlの腕を磨きます。

本当にご丁寧にありがとうございました。

お礼日時:2003/05/15 01:45

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q”:”がいっぱいの文について。

perl超初心者です(その2)。
use Pg;
Pg::connectdb

use Apache::Session::Postgres;
Apache::Session::Postgres
など
:がたくさんついているのは、これは一体なんでしょうか・・・?
c言語でいうところの
#include <stdio.h>
printf();
みたいな関係でしょうか。

web検索するにも適切なキーワードがわからず困っています。
ご存知の方、もしくは、日本語での詳しく解説されているサイトを
ご存知の方がいらっしゃいましたら教えてください。
よろしくおねがいいたします。

Aベストアンサー

わたしも perl 初心者です。といっても、ほとんどやってません。

「perl」「コロン」で検索したら、パッケージの区切り子としてダブルコロン(?)を使うみたいですよ。

---引用(一部編集済)-----------------------------------------------------------------

他のパッケージ空間にある変数やサブルーチンを呼び出す必要があるときは、
パッケージ名とコロン(:)2つを変数名やサブルーチン名の前に付け足します。
たとえば、pkg1 パッケージの $value を参照するには、「$pkg1::value」と
なります。

 &pkg1:routine(); # pkg1 パッケージの &routine サブルーチンを利用
 $pkg1value(); #pkg1 パッケージの $value 変数を利用


パッケージ名なしで2つのコロンを置くと、main パッケージの略称となります。つまり、「$::value」は「$main::value」と同じ意味になります。

参考URL:http://www.harukaze.net/~mishima/perl/man/perlmod.1.html

わたしも perl 初心者です。といっても、ほとんどやってません。

「perl」「コロン」で検索したら、パッケージの区切り子としてダブルコロン(?)を使うみたいですよ。

---引用(一部編集済)-----------------------------------------------------------------

他のパッケージ空間にある変数やサブルーチンを呼び出す必要があるときは、
パッケージ名とコロン(:)2つを変数名やサブルーチン名の前に付け足します。
たとえば、pkg1 パッケージの $value を参照するには、「$pkg1::value」と
なりま...続きを読む

QPerlのリファレンスとアロー演算子について

Perlの勉強をしています.
リファレンスとアロー演算子について教えて下さい.

■質問
下記のうち,(4)がどのように評価されるか教えて下さい.
先頭のシャープはプロンプトです.

(1)
よくある配列要素の指定方法
# perl -e '@a = (0,1,2,3); print($a[1]);'
→1

(2)
あまりよろしくないが,スライスを使っても,print文では@a[1]がリストのコンテキストで評価されるので同じ結果にはなる
# perl -e '@a = (0,1,2,3); print(@a[1]);'
→1

(3)
よくあるリファレンス/デリファレンスの方法
# perl -e '$a = [0,1,2,3]; print($a->[1]);'
→1

(4)
下記が成り立つ意味が分からない
# perl -e '@a = (0,1,2,3); print(@a->[1]);'
→1

@aは配列であってリファレンスでは無いと思うのですが,配列にアロー演算子が使えてしまっていいんでしょうか?
Perl5のマニュアルによれば(http://www.namazu.org/~tsuchiya/perl/info/perl-ja_20.html),アロー演算子は「右側が [...] か {...} の形の添字であれば、左側は配列かハッシュへのハードリファレンスかシンボリックリファレンス」と書かれているので,左側が配列そのものであるときは,エラーになるのではないかと思うのですが...

分かる方,どなたかご教授いただければ幸いです.

■環境
# perl -v

This is perl, v5.10.1 (*) built for i686-cygwin-thread-multi-64int
(with 13 registered patches, see perl -V for more detail)

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Perlの勉強をしています.
リファレンスとアロー演算子について教えて下さい.

■質問
下記のうち,(4)がどのように評価されるか教えて下さい.
先頭のシャープはプロンプトです.

(1)
よくある配列要素の指定方法
# perl -e '@a = (0,1,2,3); print($a[1]);'
→1

(2)
あまりよろしくないが,スライスを使っても,print文では@a[1]がリストのコンテキストで評価されるので同じ結果にはなる
# perl -e '@a = (0,1,2,3); print(@a[1]);'
→1

(3)
よくあるリファレンス/デリファレンスの方法
# perl -e '$a = [0,1,2...続きを読む

Aベストアンサー

http://perldoc.jp/docs/perl/5.8.8/perldiag.pod を
Using an array as a reference is deprecated
で検索すると、
> (D deprecated) @foo->[23] や @$ref->[99] の形で、
> 配列をリファレンスとして使おうとしました。
> 5.6.1 以前のバージョンの perl ではこの構文を許していましたが、
> そうするべきではありません。 これは今では非推奨であり、
> 将来のバージョンでは削除されるでしょう。
とあります。

昔は許されていた書き方のようです。

参考URL:http://d.hatena.ne.jp/fbis/20080304/1204621962


人気Q&Aランキング