Perlコーディング初心者質問スレ Part 53
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/26(日) 14:38:23ID:SlmGsFMB【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0519nobodyさん
2006/12/26(火) 18:46:11ID:PubWBr4/あとスレ違い
0521JAPU ◆lVJAPUTeX.
2006/12/26(火) 20:08:35ID:???古代のMacPerlではohzakiの記載も正しいですが、最近のPerlでは\n = NL(LF), \r = CR のはずですが…
今時そこまで古いバージョンに気を使う必要は無いでしょう。
そもそも、\n と \r の意味が逆転しているのも独自仕様ですし。
>>518
セッション管理が面倒なら、削除する際にも再度パスワードを入力させてチェック。
この手法だと、CSRFを回避することができるおまけ付き。
0522nobodyさん
2006/12/26(火) 20:15:42ID:???ん?よく分からないんだが、最新のActivePerlとかMacPerlでは挙動が変わったってこと?
よその環境用には書かないからマジでわからん。
0523nobodyさん
2006/12/26(火) 20:17:46ID:???0524518
2006/12/26(火) 20:43:26ID:ISbRNGDdありがとうございました
解決しました
0525JAPU@坂井恋夏 ◆lVJAPUTeX.
2006/12/26(火) 20:51:33ID:???binmode はこの改行コード変換を抑制する関数です。(最近ではそれに加えてPerlIO層の変換ルールを指定する機能も持たされました。)
この変換があるため、Windows環境ではbinmodeを指定せずバイナリ (画像データなど) を出力する際に正しいデータが出力できないという罠に陥ります
# MacPerl の場合、\r と \n の役割を入れ替えることで、Unix 用に書かれたスクリプトが (binmodeせず) そのまま動作することを期待していたのでしょう。(多分)
ActivePerl でも、\n 自体は LF となります。以下が実行例です。
C:\>perl -e "$x = qq[\n]; print unpack q[H*], $x"
0a
また、binmodeの有無によって改行コードの変換がされる・されないことは以下の通り実行したら分かります。
C:\tmp>perl -e "open FH, q[> sakura.txt] or die; print FH qq[\n]"
C:\tmp>perl -e "open FH, q[> tomoyo.txt] or die; binmode FH; print FH qq[\n]"
MacPerl は今でもあるかは知りません。
「古代のMacPerlでは」→「少なくともある時点でのMacPerlでは」に訂正します。
0526nobodyさん
2006/12/26(火) 21:15:11ID:???0527nobodyさん
2006/12/26(火) 21:42:36ID:???そうさせない方法があったはず
0529nobodyさん
2006/12/26(火) 23:49:25ID:???0531nobodyさん
2006/12/27(水) 15:46:35ID:???0532nobodyさん
2006/12/27(水) 16:52:37ID:Dit2F/dP0533nobodyさん
2006/12/27(水) 17:25:34ID:???0534533
2006/12/27(水) 17:57:11ID:???my $aaa = {
a => 'あ',
b => 'い',
c => 'う'
};
my $bbb = {
a => 'え',
b => 'お',
c => 'か'
};
my $ccc = {
a => 'き',
b => 'く',
c => 'け'
};
my @aaa = (\%aaa, \%bbb, \%ccc);
foreach my $a (@aaa) {
foreach my $b (keys(%$a)) {
print %$a->{$b};
}
}
0535nobodyさん
2006/12/27(水) 17:58:45ID:???$foo{hoge}:
%fooというハッシュのキーhogeに対応する値
$foo->{hoge}:
$fooに格納されたハッシュリファレンスで示されるハッシュの
キーhogeに対応する値
0536nobodyさん
2006/12/27(水) 18:03:24ID:???$foo{hoge} ハッシュの値
$foo->{hoge} ハッシュリファレンスの値(デリファレンス)
>>533
$foo[0]->[0]とか$foo[1]->{hoge}とか
0538nobodyさん
2006/12/27(水) 18:16:16ID:???ご回答ありがとうございますm(_ _)m
ようやく両者の違いがわかりました!
>>537
おお〜出来ました!ありがとうございます!
$aaa = {
};
と
%aaa = (
);
の違いについて分かるサイトはございますか?
前者が名前の無いハッシュなんとかかんとかというのは分かったのですが・・・
0539nobodyさん
2006/12/27(水) 18:43:49ID:???ハッシュをforeachやwhileでまわすと、例えば>>534の例で言えばc→a→bのように、返される値の順序がバラバラになるんです。
この理由は分かった(というか元々バラバラになるようになっている)のですが、これは番号を振ってsortしなくてはいけないのですか?
0540nobodyさん
2006/12/27(水) 19:01:43ID:???いちいち番号を振らなくてもsortで出来るんですねヽ(・∀・)ノ
0541nobodyさん
2006/12/27(水) 19:08:24ID:???理由は「ハッシュ」という名前に関係してるんだけど、
詳しく知りたければ「ハッシュテーブル」を検索してみてね。
0542nobodyさん
2006/12/27(水) 19:15:48ID:???%aaa = (
);
なら
$fhoge}
ttp://www.rfs.jp/sb/perl/02/10.html
ここなんかどうだろうか
0543nobodyさん
2006/12/27(水) 19:17:09ID:???%aaa = ();
なら
$aaa{hoge}
$aaa={};
なら
$aaa->{hoge}
0544JAPU@坂井恋夏 ◆lVJAPUTeX.
2006/12/27(水) 20:12:52ID:???0545nobodyさん
2006/12/27(水) 20:17:56ID:???0546nobodyさん
2006/12/28(木) 00:05:37ID:???グローバル変数 (中括弧で囲われていない部分で my 宣言) にして 1回書き込むだけにしたら、
スクリプト全体の実行速度が 10倍以上になった。
my @dasabase = (
['aa', 'ab', 'ac', 'ad');
['ba', 'bb', 'bc', 'bd');
['ca', 'cb', 'cc', 'dd');
['da', 'db', 'dc', 'dd');
);
みたいな 5KB 程度のデータを多次元配列にいれてるだけなんだけど、(サブルーチンの呼び出し回数は 500回ぐらい)
Perl の配列処理が遅いのか、5KBのデータが重いのかは知らないけど、今時のハイスペックなマシンでも、ただ短いデータを代入するだけの処理で
リソース食いつぶしたりするもんなんだね。
0547nobodyさん
2006/12/28(木) 00:39:59ID:???記事修正用のパスワードはユーザ任せにするわけですが、crypt 関数でハッシュ化したものを記録すると
ログに記載されたパスワードのハッシュからパスワードクラックされる危険はどの程度あるのでしょうか?
(パスワードは6文字の英数字の場合)
また、crypt よりも安全な一方向関数はありますでしょうか?
よろしくお願いします。
0548nobodyさん
2006/12/28(木) 00:55:31ID:???今時のPCだとcryptで6文字とかそらもうあっさり解析される。
とりあえずお手軽なところではMD5あたりだと思うが、
そもそもパスワードのログだけ別ファイルにすれば良くね?
0549nobodyさん
2006/12/28(木) 00:56:23ID:???それによってアウローチが変わると思われ
0550nobodyさん
2006/12/28(木) 01:08:04ID:???0551nobodyさん
2006/12/28(木) 02:53:29ID:???XORなどのビット演算で数回かき回したものを置けば、元のパスワードは判別不能になる。
もちろん、かき回しロジックを公開しては意味がない。
0552nobodyさん
2006/12/28(木) 09:03:40ID:???0553547
2006/12/28(木) 09:53:44ID:???回答ありがとうございます。
操作性とスクリプトの簡略化のために、トリップキーと削除・編集パスワードを同じものにしたいので、
必然的にパスワードを一方向関数で変換した値は公開されちゃうんです。(トリップとして)
tripper のようなトリップ解析ツールでも6文字なら1日以内に解読できちゃうので、やはり危険ですよね。
>>550
なるほど
http://www.tohoho-web.com/wwwperl2.htm#crypt
そうすればMD5が使えるみたいですね
>>551-552
自分のサイトだけで使ってるならかき混ぜでもばれなさげですね。。。
まぁ基本的に隠蔽によるセキュリティはよくないですが。
よく考えてみると、トリップとして公開するデータをパスワードの一方向関数変換結果の一部にしちゃえば
解読が困難になりそうですね。
ありがとうございました。
0554nobodyさん
2006/12/28(木) 13:58:02ID:hVZzWyfvmy $self = {};
my $self = [];
この2通りの記述を見ました。
{}と[]の違いってなにかあるんですか?
あと、それらに空要素を入れる場合、=0や=''ではなく={}や=[]とする理由も加えてご教示願います。。。m(_ _)m
0555nobodyさん
2006/12/28(木) 14:02:16ID:???$aaa=[]; # 配列リファレンス
@aaa=(); # 配列
$aaa=''; # スカラー
0556nobodyさん
2006/12/28(木) 14:04:14ID:???オマイラとりあえずperlreftut嫁
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlreftut.html
その質問の答えは全てリファレンスとは何かと言うことを理解することによって得られるから。
0557nobodyさん
2006/12/28(木) 14:16:08ID:hVZzWyfvありがとうございます!
参考サイトは10回ブックマークに登録しました。
0558nobodyさん
2006/12/28(木) 14:27:15ID:???ちなみにそのサイト、テンプレ>>2にある
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
だからね。
今回は入門としてとりあえずチュートリアル(perlreftut=perl-reference-tutorial)を紹介したけれど、
ちゃんと理解するためにはperldata、perlref、perllolあたりも読んでおいてほしいところだ。
0559nobodyさん
2006/12/28(木) 20:22:01ID:???windows上で動作するアプリケーションで使用するテキストを出力するCGIを作っています。
(スクリプトのエンコードはEUCJP)。
現時点では次のような処理をしています。
投稿ページをEUCのHTMLで出力
↓
投稿ページからPOSTされた文字列を加工して
Shift-JIS(CP932)に変換してテキストファイルに保存
(変換にはJcode::CP932モジュールを使用)
↓
テキストファイル(CP932)を読み込んでEUCに変換して整形してHTMLに出力
(変換にはJcode::CP932モジュールを使用)
自宅鯖で使う分には良いのですが、Jcode::CP932モジュールは殆どの鯖に入ってないので、
レンタルサーバで使うにはモジュールの追加を依頼する必要があります。
そこで質問です。
1、バージョン5.8のperlの標準的なモジュールのみでEUC-JPとCP932の相互変換は出来ますか。
もし出来るなら方法を教えてください。
2、Encode.pmでCP932とEUCJPの相互変換は出来るのか、出来るなら方法を教えてください。
3、スクリプトをUTF-8で記述して、use utf8を使用してCP932とUTF-8を
相互変換したほうが良いのでしょうか。
その際、CP932とUTF-8を相互変換は標準的なモジュールのみで可能でしょうか。
0560nobodyさん
2006/12/28(木) 20:34:13ID:???0561nobodyさん
2006/12/28(木) 20:41:34ID:???Jcode-CP932っての探して見てみたが>>560の言うとおりインストールしてもらう必要は無い。
libディレクトリ以下適当にコピーしてuse libなりなんなりすれば動く。
1.
極端な話自分で変換テーブルを用意すれば変換できるわけだけれど、
CP932との変換機能が用意されているかと言えばNO。
2.
可能。非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3.
私はそっちのほうが好きではあるが別にその必要は無い。
変換については1,2のとおり。
0562nobodyさん
2006/12/28(木) 20:52:26ID:???0563nobodyさん
2006/12/28(木) 22:47:30ID:/nHSB5owCGIでパラメータを受け取る時に、ハッシュテーブルに入る変数の数が
不定の場合に、ループ処理を使って、うまく値を取り出すにはどうしたら
良いでしょうか。
パラメータ↓
aaa=テキストa&bb1=テキストb1&bb2=テキストb2&..bbx=テキストbx&ccc=テキストc
bb1〜bbxまでの値を取得したい・・。
良い方法がありましたら、ご教授よろしくお願い致します。
0564563
2006/12/28(木) 22:54:40ID:???>>563 わざわざハッシュにしなくても、bb1〜bbxだけ普通の配列に入れたらイイ?
良案お待ちしておりますー。
0565nobodyさん
2006/12/28(木) 23:18:32ID:???<form name="bb[]" value="テキストb1" />
<form name="bb[]" value="テキストb2" />
<form name="bb[]" value="テキストbx" />
みたいにしておいて、パラメータ解釈時に/(.*)\Q[]\E$/な要素を
push @{$params{$1}}, $value;
するのが常套手段ではないかと。
0566nobodyさん
2006/12/28(木) 23:20:10ID:???s/form/input type="text or hidden"/g
:
:
}
とか?
0568nobodyさん
2006/12/29(金) 01:12:17ID:???おれ、
use Encode qw(from_to);
from_to($hoge, 'cp932', 'euc-jp');
from_to($hoge, 'euc-jp', 'cp932');
で変換して使ってるけど、非標準モジュール入れた記憶ないなあ。
0569561
2006/12/29(金) 01:31:54ID:???あーごめんなさい。>>561は撤回…完全に記憶違いです…
CP932との変換テーブルはデフォルトで入ってるのか。
無いのはMicrosoft仕様のEUCJP-msね。
丸囲み文字とかローマ数字とかそういうやつがEUCJPに変換できないのか…
1. EUC-JPとの変換はできるが一部CP932が拡張している一部の文字について変換できない。
2. 可能。完全に変換するためには非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3. 標準モジュールのみで可能。
で合ってるかな…まあなんにしろ一度派手に記憶違いしてた人の回答なんて
信用できませんので誰か詳しい人お願いしますillorz
0570nobodyさん
2006/12/29(金) 01:40:21ID:???パスを通せば動くんですか。。。
use libの使い方が良くわからなかったので、検索しました。
結構使えそうですね。ただ、コンパイルの必要なモジュールには使えないかも。
use utf8にも挑戦してみます。
use utf8を知る前に投稿を受け取る部分を作ったので
文中で正規表現で2バイト文字を使うために\nxx\nxxで文字を記しているので
面倒になるかもしれませんが。
>>568
Encodeでも可能なんですかね。ちょっとやってみます。
>>569
Jcode::CP932では上のほう(>>404)で話が出ていた���A�ケも�O���Uも上手に変換できていたので
もしかしたらいけるかもしれません。ちょっとやってみます。
#文字コード変換は鬼門ですね。
0571nobodyさん
2006/12/29(金) 02:16:03ID:???まず、use Encode qw(from_to);での結果。
from_to($huga, 'cp932', 'eucjpms');
ダメでした。
���A�ケ�O���Uと続けて記入したデータが??????に化けました。
次にEncode::EUCJPMSを読み込ませた上で
↓のように記述してみました。
from_to($huga, 'cp932', 'eucjpms');
これもダメでした。���A�ケが全角空白に変換され �O���Uと出力されてしまいました。
3、のuse utf8は時間が掛かるので明日にでも全改修してやってみます。
0572nobodyさん
2006/12/29(金) 02:29:36ID:???eucjpmsじゃなくてcp51932だとどうだろ
ttp://msyk.at.webry.info/200511/article_2.html
ttp://legacy-encoding.sourceforge.jp/wiki/index.php?cp51932
こちらで確認したところそれらの文字は全部通った。
0573nobodyさん
2006/12/29(金) 02:35:41ID:???>>572
from_to($ds, 'cp932', 'cp51932');
OKでした。でも、このcp51932ってエンコードって5系perlには標準で入ってましたっけ。
EUCJPMSはロードしなくても出来たので、最新版のEncodeでは標準のようですが。
0574nobodyさん
2006/12/29(金) 02:43:29ID:???ありゃ?
ttp://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm
に書いてあるからEncode::EUCJPMSが提供しているものだと思ったんだけど。
そして当方ではロードしないとUnknown encodingとエラー起こしてる…
>perl -MEncode -e "print $Encode::VERSION"
2.18
0575nobodyさん
2006/12/29(金) 03:05:50ID:???私の使ったEncode::EUCJPMSをロードしないと言うのは
use Encode::EUCJPMS
と、記述しないと言うことですが。。。
って、use Jcode::CP932を書いたままでした。
Jcode::CP932内でEncode::EUCJPMSを呼んでるので動いたのでしょう。
となると、標準モジュールのみでやるにはやはりuse utf8プラグマをつけないとダメってことですかね。
それでも動くかどうかは判らないですが。
0576nobodyさん
2006/12/29(金) 04:26:07ID:???現時点でhtmlで簡単なサイトぐらいなら作れる、人並みの脳みそを持った人が、
仕事の合間を縫ってそれなりに勉強して、Perlを使ったCGI(初歩的な掲示板など)
をゼロから作れるようになるには何ヶ月ぐらいかかりますか?
個人的な感覚で構いませんので、どう思うか教えて下さい。
0578577
2006/12/29(金) 05:58:43ID:???0579nobodyさん
2006/12/29(金) 10:17:46ID:???やっぱ1ヶ月ぐらいかなー
0580nobodyさん
2006/12/29(金) 10:48:29ID:???一生perlしか使わないつもりなら止めないけど。
0581563
2006/12/29(金) 10:51:17ID:???ありがとうございます。実はPerlは今週はじめたばかりで、
そんな風に出来るんだ〜・・などと感心してました。
で、この結局こんな感じで進めました。
if($key =~ /^bb\d$/){ push @bb_vals, $val; } #キーが"bb[0-9]"の処理
elsif($key =~ /^dd\d$/){ push @dd_vals, $val; } #キーが"dd[0-9]"の処理
else{ ハッシュテーブル作成 }
�@入力フォームに、ラジオボタンが数種類 × 数グループあったので、
nameを同じにすると ややこしい感じに
�Aフォームの順番も重要だったので、順不同なkeysは今回は使いにくそう
な感じでした。
これからまた、お世話になるかもしれません。よろしくお願いします。
>>576
プログラムかUNIX系の知識があれば、一週間もあれば。
それ以外であれば、やっぱりひと月でしょうねー。
0583nobodyさん
2006/12/29(金) 13:41:38ID:???やるならCから入った方がいい・・・と、Cから入った俺がry
0584nobodyさん
2006/12/29(金) 14:10:55ID:???0585nobodyさん
2006/12/29(金) 19:17:04ID:???1ヶ月あれば形になると思う。あとHaskellやろう。
0587nobodyさん
2006/12/29(金) 19:32:26ID:???0588576
2006/12/29(金) 19:38:01ID:???回答ありがとうございます。
現状私は、htmltとcssとJavascriptが
本当に「できる」と言っていいのかすらわからない程度にできます。
それ以外は一切できません。Perlを使ったフリーCGIのソースをいじくり回す程度です。
仕事でWebデザインぽいことをやってますが、デザインだけではどうにもこうにもアレなので、
CGIを習得しようと思い、CGIと言えばPerlだろという考えで書き込みました。
純粋にプログラミングというより、あくまでもCGIを作るための言語を学びたいので、
WebProg板に来た次第です。
仕事が忙しいので、自習は週4日、1時間程度で考えています。
みなさんを信じてまずは1ヶ月がんばります。
そこで、>>1-10あたりにあるサイト以外で、オススメのサイト、
書籍、「その前にまずこれをやれ」的なことなどありましたら教えて下さい。
0593nobodyさん
2006/12/29(金) 21:10:19ID:???>「その前にまずこれをやれ」的なことなどありましたら教えて下さい。
こんなとこで回答期待してないでさっさと着手しろ。
そういうやつに限って始めるまでが長くて結局何も出来ない。
0595nobodyさん
2006/12/29(金) 22:38:09ID:???じゃあ逆にお勧めのPerlishって誰?
0596nobodyさん
2006/12/29(金) 23:05:21ID:???お勧めの人を作らないことがお勧め。
特にPerlの場合は、いろんな書き方があるから、いろんなコードを読んでおいたほうがいい。
このスレを見るのがためになると思う。
答える側になっても、ここではまだまだ新しい発見があるし。
0597nobodyさん
2006/12/29(金) 23:43:55ID:???)'ーーノ( | | | 、 / l| l ハヽ |ー‐''"l
/ P | | |/| ハ / / ,/ /|ノ /l / l l l| l P ヽ
l ・ i´ | ヽ、| |r|| | //--‐'" `'メ、_lノ| / ・ /
| B l トー-トヽ| |ノ ''"´` rー-/// | B |
| ・ |/ | l ||、 ''""" j ""''/ | |ヽl ・ |
| P | | l | ヽ, ― / | | l P |
| !! | / | | | ` ー-‐ ' ´|| ,ノ| | | !! |
ノー‐---、,| / │l、l |レ' ,ノノ ノハ、_ノヽ
/ / ノ⌒ヾ、 ヽ ノハ, |
,/ ,イーf'´ /´ \ | ,/´ |ヽl |
/-ト、| ┼―- 、_ヽメr' , -=l''"ハ | l
,/ | ヽ \ _,ノーf' ´ ノノ ヽ | |
、_ _ ‐''l `ー‐―''" ⌒'ー--‐'´`ヽ、_ _,ノ ノ
 ̄ ̄ | /
0598nobodyさん
2006/12/30(土) 00:06:42ID:???0599nobodyさん
2006/12/30(土) 10:22:00ID:2X8njGUnkent(と、その属性のクローン)だけは外す事を明記するのを忘れている
俺は、それで散々な目にあったから
いゃ、俺だけではないが
0600nobodyさん
2006/12/30(土) 11:24:16ID:???画面などのデザインを変更するプロパティみたいなのってありますか?
教えてください。
スレ違いなのは承知の上です。
0602nobodyさん
2006/12/30(土) 12:32:16ID:???0603nobodyさん
2006/12/30(土) 14:47:43ID:???0604nobodyさん
2006/12/30(土) 16:37:11ID:???>スレ違いなのは承知の上です。
板違いだったりする。
http://pc10.2ch.net/test/read.cgi/tech/1166708139/
0605nobodyさん
2006/12/31(日) 02:44:28ID:oF4MMStz%hash = (
a => 変数,
b => 配列のリファレンス,
c => 変数,
d => 配列のリファレンス,
e => 配列のリファレンス,
...
);
であるとき、ループで%hashのvalueだけを評価して、もし配列のリファレンスであればその配列を展開する・・・という処理はどうすれば良いでしょうか。
0606nobodyさん
2006/12/31(日) 02:48:12ID:oF4MMStzwhile (ref(values(%hash)) eq 'ARRAY') {
...
}
という処理を使うことにします。
・・・間違ってるのかな?
0607nobodyさん
2006/12/31(日) 04:17:23ID:oF4MMStz%hash = (
a => 'あああ',
b => [
{ c => 'いいい' },
{ d => [
{ e => 'ううう' }
] }
);
このようにハッシュのvalueに幾度(無限に)も配列のリファレンスがネストしてあるとき、どのようにすれば下層部のハッシュ(上記の場合e => 'ううう')が取り出せるのでしょうか?
0609nobodyさん
2006/12/31(日) 10:33:33ID:oF4MMStz試してはみたんですが、出来ませんでした。。。
端折ると↓のようにしてみたんですが
sub aaa {
foreach () {
if (ref()) {
&aaa();
} else {
普通のしょり
}
}
}
0610nobodyさん
2006/12/31(日) 14:29:56ID:???0611nobodyさん
2006/12/31(日) 17:01:53ID:???【書き方1】
function check() {
if ($x == 2) {
print "Xは2です。";
} elsif ($x == 5) {
print "Xは5です。";
} else {
print "Xは2でも5でもありません。";
}
}
【書き方2】
function check()
{
if ($x == 2)
{
print "Xは2です。";
}
elsif ($x == 5)
{
print "Xは5です。";
}
else
{
print "Xは2でも5でもありません。";
}
}
0612611
2006/12/31(日) 17:05:01ID:???自分は 【書き方2】 で理由は、
・開始括弧と終了括弧が揃っている。
・開始括弧の行が空く (括弧だけの行ができる) ので見やすい。【書き方1】 だと空行入れるべきか入れないべきかで毎回迷ってやりにくい。
・elsif の行がスマートになる。
です。
皆さんのお好み、または標準のコーディングルールがあれば教えて下さい。
あと、自分はインデントはタブで、タブは半角スペース4つ分にしていて、文のあとにコメントを入れる場合にはタブ1つあけることにしていますが、
こちらについても教えていただけたら幸いです。
0613nobodyさん
2006/12/31(日) 17:51:26ID:???ベストプラクティスでは、「重要なのは、首尾一貫したスタイルを1つ採用することである。」としたうえで
レイアウトガイドラインの「提案」として、K&Rスタイルを採用しているね。つまり
if ($x == 2) {
print "Xは2です。";
}
elsif ($x == 5) {
print "Xは5です。";
}
else {
print "Xは2でも5でもありません。";
}
こう。んで、タブを使わず半角スペース4つを1インデントとしている。
個人的にも、特にこだわりはないので、このベストプラクティスを標準としてるなぁ。
ただ、チーム開発の時はチームのコーディングルールに合わせるけど。
でも、Perl は TMTOWTDI がモットーなんだし、好きな書き方で良いと思う。
0614611
2006/12/31(日) 17:55:49ID:???なるほど
回答していただきありがとうございました
標準的なコーディングルールを使ったほうが他の人と共有する場合や配布する場合には便利ですね。
> タブを使わず半角スペース4つを1インデントとしている。
これに関しては、自分が使っている 「phpエディタ」 も 「TeraPad」 も Tabキーで半角スペースを4つ入れる機能がないので
不便でしょうがないです(´・ω・`)
0615nobodyさん
2006/12/31(日) 17:58:21ID:???0616nobodyさん
2006/12/31(日) 18:00:26ID:???0617nobodyさん
2006/12/31(日) 18:08:53ID:???abcd = 1 + 2 + 3 +
4 + 5;
0618nobodyさん
2006/12/31(日) 18:40:04ID:???use strict;
use Data::Dumper;
my %hash = (
a => 'あああ',
b => [
{ c => 'いいい' },
{ d => [ { e => 'ううう' } ]}
]
);
parse(\%hash);
sub parse {
my $tmp = shift;
#print Dumper $tmp;
if (ref $tmp eq 'ARRAY') {
foreach (@$tmp) {
parse($_);
}
} elsif (ref $tmp eq 'HASH') {
foreach (keys %$tmp) {
parse($tmp->{$_});
}
} else {
print "$tmp\n";
}
}
■ このスレッドは過去ログ倉庫に格納されています