トップページ⇒php
1001コメント332KB

Perlコーディング初心者質問スレ Part 51

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/27(木) 17:04:23ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0552nobodyさん2006/08/16(水) 21:51:35ID:???
ツッコミまくりでワロタ
0553nobodyさん2006/08/16(水) 21:54:31ID:???
>>550
unpackに一票。
0554nobodyさん2006/08/16(水) 21:55:20ID:???
Perlに限ったことではないと思うんですが、
例えば$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));
0556nobodyさん2006/08/16(水) 21:58:19ID:???
>>550
if(/^(\d{4})(\d{2})(\d{2})$/){
  print "$1年$2月$3日";
}
0557nobodyさん2006/08/16(水) 21:59:04ID:???
かぶったorz
05585422006/08/16(水) 22:00:16ID:???
>>546
>>551
ありがとうございます。
はやく色々な方法でperlを使いこなせるようになりたいです。。
0559nobodyさん2006/08/16(水) 22:01:29ID:???
>>555-556
本当ありがとうございました orz
0560nobodyさん2006/08/16(水) 22:04:13ID:???
>>554
最近
$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;
0562nobodyさん2006/08/16(水) 22:06:09ID:???
>>561
ありがとうございました orz
0563nobodyさん2006/08/16(水) 22:08:52ID:???
>>560-561
処理の速さとかに影響があるのかと思って神経質になってましたが、
単純に可読性とか好みだけで選んで良かったんですね。

>$flag and die "hogehoge";
エラー処理を別に書かなくて良いから便利そうですね。
0564nobodyさん2006/08/16(水) 22:09:55ID:???
どうも条件文とかを後に書くやり方は慣れない

最近やっと = ? : ; がしっくり来るようになった程度だ
0565nobodyさん2006/08/16(水) 22:11:23ID:???
>>555>>556>>561
簡単な処理なのに、書き方ってたくさんあるんだな。
0566nobodyさん2006/08/16(水) 22:20:25ID:???
>>563
変数のスコープに注意すると良いと思う。
0567あぼーんNGNG
あぼーん
0568nobodyさん2006/08/16(水) 22:30:47ID:???
(^ω^ )………
0569 ◆TWARamEjuA 2006/08/16(水) 22:41:45ID:????BRZ(3010)
既に登録済みですね(呆)
0570nobodyさん2006/08/16(水) 22:59:30ID:???
アクセスするときは、/invitation以降を削除したほうがいいよ
0571nobodyさん2006/08/17(木) 06:09:44ID:???
>>564
慣れてくると快感になるよ。

というか、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:???
もの凄いのが来てるなw
多分統一は無理。どこかで折り合いをつけなされ。

Perlの中とその他を完全に切り離して考えることが一番なので、
フォルダ・ファイル名からhtmlのid属性の値などは全てハイフンでやり、
Perlの中では臨機応変に。
0574nobodyさん2006/08/17(木) 12:35:32ID:tIcJSB0O
XML::DOM使って何も無い、ファイルすらも存在しない状態からXML文書を
起こすコード書きたいんですがちょいとどうすればいいか分からず悩んでます。
存在するXMLを開いて拡張追記することは出来たんですが…
0575nobodyさん2006/08/17(木) 12:41:45ID:IXvxvsSu
uri.pmモジュールをインストールしたいのですが、
どのような手順で行えばよいでしょうか?
http://cpan.uwinnipeg.ca/search?query=uri.pm&mode=module
↑のURLまでは辿り着いたのですが、どれをどのように使えばよいのか分かりません。
0576nobodyさん2006/08/17(木) 12:42:55ID:???
perl モジュール インストール
でぐぐれ
0577nobodyさん2006/08/17(木) 12:45:46ID:???
俺の場合、ハイフンはマイナスと勘違いするから使わない
0578nobodyさん2006/08/17(木) 13:04:20ID:???
>>577
それだとcssの時面倒じゃないか?
アンダーって×だろ確か。
0579nobodyさん2006/08/17(木) 13:06:03ID:???
>>576
ありがとん
0580nobodyさん2006/08/17(木) 13:23:13ID:???
CSSとは統一しない。
統一する意味がわからん。
0581nobodyさん2006/08/17(木) 13:37:45ID:???
>>572
変数や関数の名前にハイフンを使う事はできない。
ハッシュのキーはクオートで囲む必要はない。
$form{test}としても常に大丈夫であって、strictも通る。
perl救命病棟という変な名前の本にその辺のかなりマニ
アックな話が載っている。
0582nobodyさん2006/08/17(木) 17:21:35ID:???
$form{test-test}hadamedaro?
0583nobodyさん2006/08/17(木) 17:33:16ID:???
>>580
CSSいじってperlいじってhtmlいじって。
そんなことしてるときに何かに名前をあげるときが来る。
「
う〜んこれはホゲの背景のためだからだからhoge-backとするか。
ん?ハイフン?アンダーバー?どっちだっけ?
他を見てみるか・・・
ハイフンだったな。

それじゃ画像を作るか。ん?ハイフンか?アンダーバーか?
」

なんてこともある。
0584nobodyさん2006/08/17(木) 17:39:57ID:???
全部自分かよw
理由って「悩むから」だけ?
じゃあCSSだけハイフン、あとは全てアンダーバーでOK
0585nobodyさん2006/08/17(木) 18:09:23ID:???
>>584
そうなるとhtmlで違和感を覚える。
nameはアンダーバーなのにidやclassだけハイフンっておかしくねえか?

ってね。
0586nobodyさん2006/08/17(木) 18:10:41ID:???
strictとか好きな人でたまにいるのは、
全てかんええええええwwwww

マジでウエkルwwwwwww
0587nobodyさん2006/08/17(木) 18:12:52ID:???
hogeBackImgっていう手もあるぞ
0588nobodyさん2006/08/17(木) 18:31:57ID:???
>>585
違和感だけの話なら自分ルールを決めるしかない。
現状共通のルールは無い。
スレ違い。
0589nobodyさん2006/08/17(木) 18:51:21ID:???
>>585
じゃあいっそ tr/-/_/ ってやれば?(´・ω・`)
0590nobodyさん2006/08/17(木) 19:38:03ID:???
PerlはelsifなのにJavaScriptはelseifなのもどうにかしたい

とか言い出しそうだな。
0591nobodyさん2006/08/17(木) 20:07:10ID:????2BP(223)
PHPもelseif
0592nobodyさん2006/08/17(木) 20:08:40ID:???
elif
elsif
elseif
else if
0593nobodyさん2006/08/17(木) 20:28:56ID:tIcJSB0O
XML::XSLTを使ってXMLを変換しようとしているのですが、
my $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:???
CSSはどこかで旧ブラウザを切り捨てるしかない。今から新しく作るサイトでNN4に対応してるサイトなんてほとんどないだろう。
_と-なんて気にする必要ない。
0595nobodyさん2006/08/18(金) 11:29:18ID:???
>>572
安心してください。あまり悩む必要はありません。
通常 Perl の識別子として使えるのは /[\w][\w\d]*/ にマッチする文字列だけだからです。

変数名、関数名、パッケージ名、クォートを省略したハッシュキーにはそういった文字列が要求されます。
裸の "-" はソースコード中のトークンを分割してしまい、perl はそれを「マイナス演算子」としてパースするでしょう。

従ってそれほど迷うことができる局面は多くありません。少なくとも Perl コード中では。
0596nobodyさん2006/08/18(金) 13:49:32ID:???
モジュールを作っているのですが、マルチプルインスタンスを使う必要がないとわかっているものは非OOPで作った方がいいのでしょうか。
0597nobodyさん2006/08/18(金) 14:42:19ID:xIt7iz8d
perlのcgiを使って他サイト(NOT管理下)のページを取得して、自分の好きな文字列を取得したいんですが、
詳細が乗っているサイト若しくはやり方を教えてください。
内容としては翻訳サイトのページ翻訳のようなことがしたいです
宜しくお願いします
0598nobodyさん2006/08/18(金) 14:43:32ID:???
>>597
おまえいい加減にしろ。
何個マルチしてんだボケ。
解答かえってきてるんだからまずはそれ嫁馬鹿。
0599nobodyさん2006/08/18(金) 14:47:31ID:xIt7iz8d
>>598
今レスしてきました。
こちらにも解決した旨書こうと思ってたところです、遅くなってすいません。
別にマルチするつもりはありませんでした、回され続けたもので・・ほんとスイマセン。。
>>597の質問は解決しました
ありがとうございました
06005822006/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:???
> perlに関する名前系
意味が分かりません。
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:???
>>605
んー、まぁそうなんだけど。
コードの方は例としてどうなのよ。
リファレンスを文字列として解釈して、それをキーにしてるだけだけど。
0607nobodyさん2006/08/18(金) 21:33:32ID:???
サーバーにアップするファイル名や、プログラムのソース内に
演算子を使うという行為そのものが信じられない
0608nobodyさん2006/08/18(金) 21:42:51ID:???
VBだったらどうするつもりなんだろ?
0609nobodyさん2006/08/18(金) 22:08:52ID:???
>>606
おお、本当だ。
いままで、オブジェクトのリファレンスをキーにしているものだと信じきっていた。

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:???
>>601
use と require は勝手に重複ロードを避けてくれます。ですからその場合は迷わず use しておくべきです。
# 余談: B.pm は標準モジュールとカブるんで例にしてもイマイチかな。
0611nobodyさん2006/08/18(金) 23:34:13ID:+PBYJBRx
研究室でC言語のプログラムをかなり多く回すのですが、先輩から
「いちいちプログラムを一つ一つ回すのめんどくさいからキー一つで全てのプログラムを研究室内のコンピュータに分散させて回せるようにしとけ。
 多分perlでできると思うから。」
と言われました。
当方こういった事に無知です。
何から手をつければいいのか分からず困っています。
どこで聞けばいいのか分からずこちらで聞いてみました。
どうかご教授お願いします
0612nobodyさん2006/08/18(金) 23:37:10ID:???
>>607
言いたい事は分からんでもないですが…。
「ファイル名」は気にしないなあ。ハードコードするにしてもクォートするに決まってるんで。
「プログラムのソース内に」は…ごめんなさい、少なくとも僕は使わないと書けないです。信じてもらえないかもしれませんけど。
0613nobodyさん2006/08/18(金) 23:50:50ID:???
>>611
とりあえず「perl バッチ処理」とかでググればいいと思うよ。
ていうかその研究室大丈夫か。
0614nobodyさん2006/08/18(金) 23:52:59ID:???
その大学の名前を是非教えてくれ
0615nobodyさん2006/08/18(金) 23:57:20ID:???
perlじゃなくてもシェルで組めると思うが
0616nobodyさん2006/08/18(金) 23:57:53ID:+PBYJBRx
>>613
�dクスです。感謝いたします。情報系でないのでなんとも…
>>614
聞いても「あーやっぱりw」ってなレベルの大学です。
0617nobodyさん2006/08/19(土) 00:06:53ID:???
>>616
どの辺りの地方かだけでも無理?
俺の大学の予感がする…
# ちなみに東海地方、「あーやっぱり」な大学w
0618nobodyさん2006/08/19(土) 00:08:50ID:???
世間話は mixi でやれ。
0619nobodyさん2006/08/19(土) 00:39:59ID:????2BP(223)
ゆうじんが
だれもいないから
みくしぃの
しょうたいめーる
いまだとどかず
0620nobodyさん2006/08/19(土) 00:51:25ID:???
ゆうれいがでた!?
0621nobodyさん2006/08/19(土) 07:39:58ID:???
>>619
カワイソス
06226202006/08/19(土) 08:38:28ID:???
つっこんでもらえない俺の方がカワイソウなんだが?
0623nobodyさん2006/08/19(土) 08:46:12ID:???
>>622
つっこみどころがない
誤爆としか思えない
06246202006/08/19(土) 09:05:27ID:???
縦読みだろ」。。。」
0625nobodyさん2006/08/19(土) 09:57:41ID:???
( ゚Д゚)
0626nobodyさん2006/08/19(土) 11:30:40ID:???
ここ本当にperlスレか?
0627nobodyさん2006/08/19(土) 12:00:41ID:???
糞スレです><
0628nobodyさん2006/08/19(土) 15:31:15ID:???
は?何桁目縦読み?
0629nobodyさん2006/08/19(土) 16:29:19ID:GA5MBol0
>>628
5桁目でしょ。
0630nobodyさん2006/08/19(土) 16:51:08ID:WYPasnq7
質問させて下さい。

print "<FONT size=2>表示</FONT>\n";

とすると、「表示」の文字が文字化けします。

print '<FONT size=2>表示</FONT>\n';

とすると文字化けしませんが、「\n」が表示されてしまいます。

とうしたら良いでしょうか?
0631nobodyさん2006/08/19(土) 16:58:10ID:???
print '<FONT size=2>表示</FONT>',"\n";
0632nobodyさん2006/08/19(土) 16:58:59ID:???
sjis使うのをやめる
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:???
http://www.kent-web.com/pubc/jcode/
0636nobodyさん2006/08/20(日) 08:41:26ID:???
どなたか>>596お願いします。
06376202006/08/20(日) 08:54:38ID:???
本当にわからないんだn。
頭の悪いやつにきたいした俺gまちがいただ。
0638nobodyさん2006/08/20(日) 09:02:20ID:???
うんまぁそういうことにしとけ
0639nobodyさん2006/08/20(日) 09:52:07ID:???
>>596
将来の拡張なども考えて、オブジェクト指向で書くのが良いと思う。
完全オレオレモジュールなら、どちらでもという気はする。

http://www.kt.rim.or.jp/~kbk/perl5.005/perlmodlib.html#Guidelines_for_Module_Creation
0640nobodyさん2006/08/20(日) 10:09:15ID:???
Perlが一番苦手な処理、オブジェクト指向
0641nobodyさん2006/08/20(日) 11:48:14ID:???
perlがオブジェクト指向を苦手というわけではなく、オブジェクト指向を「処理」だと
考えているキミ自信がオブジェクト指向を苦手としているのだ。
0642nobodyさん2006/08/20(日) 11:48:36ID:???
別に使う方が分かってれば全く問題ない。<OOP
0643nobodyさん2006/08/20(日) 11:58:45ID:???
メソッド名を実行時に解決するからインタープリタの苦手な分野だな。
Movable Typeがクラスを一切使わず、全部関数なら2倍弱速いとか。
0644nobodyさん2006/08/20(日) 12:11:58ID:???
コンパイラでも実行時のメソッド探索はコストが高いです。
0645nobodyさん2006/08/20(日) 16:12:29ID:???
それでも12万もしませんよ
0646nobodyさん2006/08/20(日) 16:33:59ID:???
それより中途半端なOOの実装をなんとかしる
0647nobodyさん2006/08/20(日) 17:00:10ID:???
>>646
Perl は風呂敷みたいなもんだ。
風呂敷にジュラルミンケースの長所を求めて何か嬉しいことがあるかな。

それでも君はいつでも OO::Excellent を書いて CPAN に登録できるし、きっと誰もそれを止めない。
0648nobodyさん2006/08/20(日) 18:00:00ID:???
タイム風呂敷〜
0649nobodyさん2006/08/20(日) 18:29:15ID:???
Perl6でOOP周りは随分まともになる
…が、それでもやっぱりPerlの変態度は変わらない
どころか強化されるので何とも言えない。

変数の頭に付ける記号、増えるんだよなぁ。~$?FOO とか +@*BAR とか。
0650nobodyさん2006/08/20(日) 21:00:08ID:???
>>649 それがいい
0651nobodyさん2006/08/20(日) 22:24:07ID:???
>>649
別にそういう記号が増えるだけで、
基本は変わらない。
http://dev.perl.org/perl6/doc/design/exe/E02.html
■ このスレッドは過去ログ倉庫に格納されています