Perlコーディング初心者質問スレ Part 51
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/27(木) 17:04:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0552nobodyさん
2006/08/16(水) 21:51:35ID:???0554nobodyさん
2006/08/16(水) 21:55:20ID:???例えば$flag = 1のときはエラーメッセージを出して処理終了、
そうでなければ処理続行、というとき
if($flag){&error;}
その後の処理
と書くべきか
if($flag){
&error;
}else{
その後の処理
}
と書くべきか、どちらが好ましいんでしょうか?
0555nobodyさん
2006/08/16(水) 21:57:07ID:???$date = "20041205";
$date =~ s/^(¥d{4})(¥d{2})(¥d{2})/$1年$2月$3日/;
or
sprintf("%d年%d月%d日", unpack("A4A2A2", $date));
0557nobodyさん
2006/08/16(水) 21:59:04ID:???0560nobodyさん
2006/08/16(水) 22:04:13ID:???最近
$flag and die "hogehoge";
みたいな書き方が好き。
next とかは next if ($flag); が読みやすい気がする。
0561nobodyさん
2006/08/16(水) 22:04:47ID:???俺は、elseの処理が長くなるなら前者の方法を取るし、数行で終わるならelseの中に書いちゃう。
>550
my $aa = "20060703";
($year, $month, $day) = $aa =~ /(\d{4})(\d{2})(\d{2})/;
print $year, $month, $day;
0563nobodyさん
2006/08/16(水) 22:08:52ID:???処理の速さとかに影響があるのかと思って神経質になってましたが、
単純に可読性とか好みだけで選んで良かったんですね。
>$flag and die "hogehoge";
エラー処理を別に書かなくて良いから便利そうですね。
0564nobodyさん
2006/08/16(水) 22:09:55ID:???最近やっと = ? : ; がしっくり来るようになった程度だ
0567あぼーん
NGNG0568nobodyさん
2006/08/16(水) 22:30:47ID:???0570nobodyさん
2006/08/16(水) 22:59:30ID:???0571nobodyさん
2006/08/17(木) 06:09:44ID:???慣れてくると快感になるよ。
というか、perlstyle にあるけど、その行で何をするか一目でわかるのが大事で、
それによって条件を前に書くか後に書くか分けるといいと思う。
0572nobodyさん
2006/08/17(木) 12:25:28ID:nQZCnFuY変数の名前やルーチンの名前。
オブジェクトの名前。ハッシュのキー。
&form_getなどとするときにつなぎはアンダーバーとハイフンとどちらがいいでしょうか?
ハイフンはダメだったようなきも擦るのですが、
それとハッシュのキーでは逆にアンダーバーがダメでしたのでしょうか?
クォートして$form{"test_test"}とすればよかったですかな?
なんというか。アンダーバー・ハイフン戦争が始まったのです。
画像やファイルなどのつなぎをどちらにするか、
パール内での色々な名前のつなぎをどちらにするか。
そしてcss・・・
迷いが迷いwうみ。
どちらかに統一できないものかと・・
dgんwぷ2つびん2pつb2
たすけてくさい。
0573nobodyさん
2006/08/17(木) 12:32:40ID:???多分統一は無理。どこかで折り合いをつけなされ。
Perlの中とその他を完全に切り離して考えることが一番なので、
フォルダ・ファイル名からhtmlのid属性の値などは全てハイフンでやり、
Perlの中では臨機応変に。
0574nobodyさん
2006/08/17(木) 12:35:32ID:tIcJSB0O起こすコード書きたいんですがちょいとどうすればいいか分からず悩んでます。
存在するXMLを開いて拡張追記することは出来たんですが…
0575nobodyさん
2006/08/17(木) 12:41:45ID:IXvxvsSuどのような手順で行えばよいでしょうか?
http://cpan.uwinnipeg.ca/search?query=uri.pm&mode=module
↑のURLまでは辿り着いたのですが、どれをどのように使えばよいのか分かりません。
0576nobodyさん
2006/08/17(木) 12:42:55ID:???でぐぐれ
0577nobodyさん
2006/08/17(木) 12:45:46ID:???0580nobodyさん
2006/08/17(木) 13:23:13ID:???統一する意味がわからん。
0581nobodyさん
2006/08/17(木) 13:37:45ID:???変数や関数の名前にハイフンを使う事はできない。
ハッシュのキーはクオートで囲む必要はない。
$form{test}としても常に大丈夫であって、strictも通る。
perl救命病棟という変な名前の本にその辺のかなりマニ
アックな話が載っている。
0582nobodyさん
2006/08/17(木) 17:21:35ID:???0583nobodyさん
2006/08/17(木) 17:33:16ID:???CSSいじってperlいじってhtmlいじって。
そんなことしてるときに何かに名前をあげるときが来る。
「
う〜んこれはホゲの背景のためだからだからhoge-backとするか。
ん?ハイフン?アンダーバー?どっちだっけ?
他を見てみるか・・・
ハイフンだったな。
それじゃ画像を作るか。ん?ハイフンか?アンダーバーか?
」
なんてこともある。
0584nobodyさん
2006/08/17(木) 17:39:57ID:???理由って「悩むから」だけ?
じゃあCSSだけハイフン、あとは全てアンダーバーでOK
0585nobodyさん
2006/08/17(木) 18:09:23ID:???そうなるとhtmlで違和感を覚える。
nameはアンダーバーなのにidやclassだけハイフンっておかしくねえか?
ってね。
0586nobodyさん
2006/08/17(木) 18:10:41ID:???全てかんええええええwwwww
マジでウエkルwwwwwww
0587nobodyさん
2006/08/17(木) 18:12:52ID:???0590nobodyさん
2006/08/17(木) 19:38:03ID:???とか言い出しそうだな。
0592nobodyさん
2006/08/17(木) 20:08:40ID:???elsif
elseif
else if
0593nobodyさん
2006/08/17(木) 20:28:56ID:tIcJSB0Omy $xslt = XML::XSLT->new("hoge.xsl");
これだけで
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/XML/Parser/Ex
pat.pm line 474.
Error executing run mode 'install': Error while parsing:
no element found at line 1, column 0, byte -1 at C:/Perl/site/lib/XML/Parser.pm
line 187
C:/hoge.xsl at C:/Perl/site/lib/XML/XSLT.pm line 1507.
at index.cgi line 7
とエラーが出て動く気配がありません。
ちなみにXSLの中は以下のようになっています。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xml:lang="ja">
<xsl:template match="/contents">
hoge
</xsl:template>
</xsl:stylesheet>
ためしにXSLの中を全部消してみてもダメでした。XSLファイル自体を
削除するとまた違うエラーが出たのでとりあえず読めてはいると思います。
すみません、ここで丸一日悩んでいるのですがどうすればうまいことサーバサイドで
XMLを変換できるのか、どうかご教授お願いします。
0594nobodyさん
2006/08/17(木) 22:22:55ID:???_と-なんて気にする必要ない。
0595nobodyさん
2006/08/18(金) 11:29:18ID:???安心してください。あまり悩む必要はありません。
通常 Perl の識別子として使えるのは /[\w][\w\d]*/ にマッチする文字列だけだからです。
変数名、関数名、パッケージ名、クォートを省略したハッシュキーにはそういった文字列が要求されます。
裸の "-" はソースコード中のトークンを分割してしまい、perl はそれを「マイナス演算子」としてパースするでしょう。
従ってそれほど迷うことができる局面は多くありません。少なくとも Perl コード中では。
0596nobodyさん
2006/08/18(金) 13:49:32ID:???0597nobodyさん
2006/08/18(金) 14:42:19ID:xIt7iz8d詳細が乗っているサイト若しくはやり方を教えてください。
内容としては翻訳サイトのページ翻訳のようなことがしたいです
宜しくお願いします
0599nobodyさん
2006/08/18(金) 14:47:31ID:xIt7iz8d今レスしてきました。
こちらにも解決した旨書こうと思ってたところです、遅くなってすいません。
別にマルチするつもりはありませんでした、回され続けたもので・・ほんとスイマセン。。
>>597の質問は解決しました
ありがとうございました
0600582
2006/08/18(金) 16:47:54ID:???0601nobodyさん
2006/08/18(金) 17:14:01ID:???# A.pm
package A;
use CGI;
1;
# B.pm
package B;
use A;
@B::ISA = qw(A); # この1行はなくても動くけど、実際の用途で使ってるので。
my $Q = CGI->new();
1;
こんなことやってもいいのかな?
つまり、B.pm で use CGI; って入れなくても、A で use して require してるから動くし警告も出ないんだけど、
これってお行儀よくないのかな? ってことなんだけど。
0602nobodyさん
2006/08/18(金) 17:35:23ID:???0603nobodyさん
2006/08/18(金) 18:57:28ID:lccc8Mkuアンダースコアならクォートしなくてもいいし、
もしかして、perlに関する名前系には全てアンダースコアがいいの?
でもなんでだろ。なんでハイフンを今まで使ってたんだろ。
何か理由があるはずだけどな。
0604nobodyさん
2006/08/18(金) 19:08:57ID:???意味が分かりません。
0605nobodyさん
2006/08/18(金) 19:39:04ID:???perl -e '@a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2;for (keys %h){ print "$_ = $h{$_}\n";}'
なんてのも当然の事ながら動く。
0606nobodyさん
2006/08/18(金) 19:46:28ID:???んー、まぁそうなんだけど。
コードの方は例としてどうなのよ。
リファレンスを文字列として解釈して、それをキーにしてるだけだけど。
0607nobodyさん
2006/08/18(金) 21:33:32ID:???演算子を使うという行為そのものが信じられない
0608nobodyさん
2006/08/18(金) 21:42:51ID:???0609nobodyさん
2006/08/18(金) 22:08:52ID:???おお、本当だ。
いままで、オブジェクトのリファレンスをキーにしているものだと信じきっていた。
perl -e '$k="ARRAY(0x8600b08)"; @a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2; $a[2] = "c";for (keys %h){ print "$_ = $h{$_}\n";}; print "$d=$h{$k}\n"'
($k は一回実行後、適当に直してくれ。)
0610nobodyさん
2006/08/18(金) 23:24:30ID:???use と require は勝手に重複ロードを避けてくれます。ですからその場合は迷わず use しておくべきです。
# 余談: B.pm は標準モジュールとカブるんで例にしてもイマイチかな。
0611nobodyさん
2006/08/18(金) 23:34:13ID:+PBYJBRx「いちいちプログラムを一つ一つ回すのめんどくさいからキー一つで全てのプログラムを研究室内のコンピュータに分散させて回せるようにしとけ。
多分perlでできると思うから。」
と言われました。
当方こういった事に無知です。
何から手をつければいいのか分からず困っています。
どこで聞けばいいのか分からずこちらで聞いてみました。
どうかご教授お願いします
0612nobodyさん
2006/08/18(金) 23:37:10ID:???言いたい事は分からんでもないですが…。
「ファイル名」は気にしないなあ。ハードコードするにしてもクォートするに決まってるんで。
「プログラムのソース内に」は…ごめんなさい、少なくとも僕は使わないと書けないです。信じてもらえないかもしれませんけど。
0614nobodyさん
2006/08/18(金) 23:52:59ID:???0615nobodyさん
2006/08/18(金) 23:57:20ID:???0616nobodyさん
2006/08/18(金) 23:57:53ID:+PBYJBRx�dクスです。感謝いたします。情報系でないのでなんとも…
>>614
聞いても「あーやっぱりw」ってなレベルの大学です。
0618nobodyさん
2006/08/19(土) 00:08:50ID:???0620nobodyさん
2006/08/19(土) 00:51:25ID:???0622620
2006/08/19(土) 08:38:28ID:???0624620
2006/08/19(土) 09:05:27ID:???0625nobodyさん
2006/08/19(土) 09:57:41ID:???0626nobodyさん
2006/08/19(土) 11:30:40ID:???0627nobodyさん
2006/08/19(土) 12:00:41ID:???0628nobodyさん
2006/08/19(土) 15:31:15ID:???0629nobodyさん
2006/08/19(土) 16:29:19ID:GA5MBol05桁目でしょ。
0630nobodyさん
2006/08/19(土) 16:51:08ID:WYPasnq7print "<FONT size=2>表示</FONT>\n";
とすると、「表示」の文字が文字化けします。
print '<FONT size=2>表示</FONT>\n';
とすると文字化けしませんが、「\n」が表示されてしまいます。
とうしたら良いでしょうか?
0631nobodyさん
2006/08/19(土) 16:58:10ID:???0632nobodyさん
2006/08/19(土) 16:58:59ID:???0633nobodyさん
2006/08/20(日) 01:19:05ID:???0634nobodyさん
2006/08/20(日) 01:21:43ID:jxY7weHr/⌒ヽ γ⌒'ヽ
( ^ω^)i ミ(二i
( ∪ ∪ヽ、,,_| |ノ
と_)_) r-.! !-、
`'----'
0635nobodyさん
2006/08/20(日) 02:30:01ID:???0637620
2006/08/20(日) 08:54:38ID:???頭の悪いやつにきたいした俺gまちがいただ。
0638nobodyさん
2006/08/20(日) 09:02:20ID:???0639nobodyさん
2006/08/20(日) 09:52:07ID:???将来の拡張なども考えて、オブジェクト指向で書くのが良いと思う。
完全オレオレモジュールなら、どちらでもという気はする。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmodlib.html#Guidelines_for_Module_Creation
0640nobodyさん
2006/08/20(日) 10:09:15ID:???0641nobodyさん
2006/08/20(日) 11:48:14ID:???考えているキミ自信がオブジェクト指向を苦手としているのだ。
0642nobodyさん
2006/08/20(日) 11:48:36ID:???0643nobodyさん
2006/08/20(日) 11:58:45ID:???Movable Typeがクラスを一切使わず、全部関数なら2倍弱速いとか。
0644nobodyさん
2006/08/20(日) 12:11:58ID:???0645nobodyさん
2006/08/20(日) 16:12:29ID:???0646nobodyさん
2006/08/20(日) 16:33:59ID:???0647nobodyさん
2006/08/20(日) 17:00:10ID:???Perl は風呂敷みたいなもんだ。
風呂敷にジュラルミンケースの長所を求めて何か嬉しいことがあるかな。
それでも君はいつでも OO::Excellent を書いて CPAN に登録できるし、きっと誰もそれを止めない。
0648nobodyさん
2006/08/20(日) 18:00:00ID:???0649nobodyさん
2006/08/20(日) 18:29:15ID:???…が、それでもやっぱりPerlの変態度は変わらない
どころか強化されるので何とも言えない。
変数の頭に付ける記号、増えるんだよなぁ。~$?FOO とか +@*BAR とか。
0651nobodyさん
2006/08/20(日) 22:24:07ID:???別にそういう記号が増えるだけで、
基本は変わらない。
http://dev.perl.org/perl6/doc/design/exe/E02.html
■ このスレッドは過去ログ倉庫に格納されています