Perlについての質問箱 30箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/14(水) 22:54:12"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 29箱目
http://pc11.2ch.net/test/read.cgi/tech/1166708139/
リンク集は>>2-3
過去スレは>>4
0233デフォルトの名無しさん
2007/04/11(水) 00:55:09んなもんどうでもなるやん。何の意味があるのかさっぱりわからん。
0234デフォルトの名無しさん
2007/04/11(水) 01:45:440235デフォルトの名無しさん
2007/04/11(水) 10:26:47少しお尋ねします。
例えば
perl -pi.bak -e "tr/A-Z/a-z/"*.html
とか便利ですよね?
これを.plとして使いたいのですが無理なのでしょうか?
コマンドラインから打ち込むしか手がないのでしょうか?
0236デフォルトの名無しさん
2007/04/11(水) 10:40:03perlrun(1)の-iオプションの説明のとこに例があるだろ。よく嫁。
From the shell, saying
$ perl -p -i.orig -e "s/foo/bar/; ... "
is the same as using the program:
#!/usr/bin/perl -pi.orig
s/foo/bar/;
which is equivalent to
#!/usr/bin/perl
$extension = '.orig';
LINE: while (<>) {
if ($ARGV ne $oldargv) {
(改行大杉でおこられるので以下略)
0237デフォルトの名無しさん
2007/04/11(水) 10:40:50http://pc11.2ch.net/test/read.cgi/tech/1173880452/235
0238デフォルトの名無しさん
2007/04/11(水) 10:49:06アリガトウございます。
なお、質問するスレが似つかわしくないと重い他スレにも同じ内容を質問させていただきましたが
ご迷惑かけたようで申し訳ないです。
0239デフォルトの名無しさん
2007/04/11(水) 11:06:13windowsだとどうも面倒なようなので他の手にします。お騒がせしました。
0240デフォルトの名無しさん
2007/04/11(水) 11:33:56与えたperlをsystemかexecで起動するようなスクリプト書く
手もあるよ。
病的に効率を気にする人にはお勧めしませんけど。
0241デフォルトの名無しさん
2007/04/11(水) 21:53:06Windowsなら.batに書けばいいんじゃね?
なんで.plにこだわるのかわからん
0242デフォルトの名無しさん
2007/04/11(水) 22:50:120243デフォルトの名無しさん
2007/04/11(水) 23:15:280244デフォルトの名無しさん
2007/04/12(木) 01:10:07馴れ合いなので、聞く必要なし
0245デフォルトの名無しさん
2007/04/12(木) 04:01:25見事になんにもなし。
0246デフォルトの名無しさん
2007/04/13(金) 05:01:57ありがとうございます。
>>241
いえ。こだわってないから他の手にするつもりです。
UNIX環境でないとなかなか不便なものなんですね。
0247デフォルトの名無しさん
2007/04/13(金) 22:58:40>UNIX環境でないとなかなか不便なものなんですね。
この点は同意なんだけどね。
しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
0248デフォルトの名無しさん
2007/04/14(土) 00:31:00てかperlの質問じゃなくて、コマンドラインについての質問だよな・・・
0249デフォルトの名無しさん
2007/04/14(土) 13:30:37>しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
主観的且つ感情的な意味でしょうか?そうではないとしたら何か理由がおありですよね?
不便と思わない理由はなんでしょうか?
>>248
スレ違いになるかもですね。
そろそろ退散したいと思います。
0250デフォルトの名無しさん
2007/04/14(土) 13:32:25?
0251デフォルトの名無しさん
2007/04/14(土) 17:11:52# >>235 の望みを叶える夢のスクリプト:
exec 'perl', '-pi.bak', '-e "tr/A-Z/a-z/"', shift;
__END__
0252デフォルトの名無しさん
2007/04/14(土) 22:29:21頭大丈夫?
0253デフォルトの名無しさん
2007/04/14(土) 22:41:39間抜けな質問というしかない。
0254デフォルトの名無しさん
2007/04/14(土) 22:55:57@a = grep {/(foo|bar|baz)/} split /(foo|bar|baz)/ , $_;
0255デフォルトの名無しさん
2007/04/14(土) 23:30:26会社のHP作成を引き継いだのですが、わからないことがあるのでどなたか教えていただけないでしょうか。
コンボボックスを外部のテキストから読み込んでいるのですが、途中までしか表示されないのです。
0<>--<><>
1<>A<><>
2<>B<><>
3<>C<><>
4<>D<><>
5<>E<><>
6<>F<><>
7<>G<><>
8<>H<><>
(中略)
14<>N<><>
上記が外部テキストの中身なのですが、コンボボックスには8までしか表示されないのです。
コンボボックスの方は
#編集モード以外は表示するだけ、編集モード時はコンボボックスで表示
if (!$edit) {$html .= "<td align=\"center\"><table width=\"100%\">";
for ($l = 0; $l < $periods; $l++) {
if ($showpname) { $html .= "<tr><td>$periodname[$l]</td>"; }
$html .= "<td align=\"center\">$STATUSSTR[$stats[$l]]</td></tr>";}
$html .= "</table></td>\n";}
となっています。
全てを表示させるようにするにはどこを変えたらいいのでしょうか。
(これだけの情報では不十分でしたらすみません。
他にどんな情報が必要かも教えていただければ幸いです)
Perl関連の本など読んでみたのですがわからなくて…
宜しくお願いします。
0256デフォルトの名無しさん
2007/04/14(土) 23:36:540257デフォルトの名無しさん
2007/04/14(土) 23:48:58あ、もしかしてここは関係なかったですかね…
カレンダーの1日ごとにコンボボックスが入っているので、そのカレンダーの方のコードなんでしょうか…
わからないことだらけのまま質問してしまってごめんなさい。
もう一度コードを見直してみます。
0258デフォルトの名無しさん
2007/04/14(土) 23:53:55perlコードの、$periods、$showpname・・・とやらが何なのかわからないと
何もアドバイス出来ないよ。
0259デフォルトの名無しさん
2007/04/15(日) 00:03:49そうですか…
$periodsなどなどは専門用語なのかなぁ、と思っていたのでそこから間違いだったのですね。
前任者とは全く連絡が取れず、初心者の私には何がなにやらさっぱりで…
失礼致しました。
もっと勉強して出直します!
0260デフォルトの名無しさん
2007/04/15(日) 00:23:130261デフォルトの名無しさん
2007/04/15(日) 00:39:39期間…カレンダー関係ですかねぇ。
日ごとにアルファベッドを選択して登録するんですけど、
何ヶ月か分をまとめて登録してそれをScriptで(?)違うページに呼び出すので、それですかねぇ…
それにしても8番までしか出てこないのもどこかで指定してるんですかねぇ。
あまりにファイルが多すぎて、探すのに時間がかかりそうです…
0262デフォルトの名無しさん
2007/04/15(日) 00:52:49本当にそのコードが該当コードなのかどうか怪しいね
ありうるとすれば@STATUSSTRの中が"<select>…"といったhtmlになってるとか
とりあえずPerlの配列変数は先頭の記号が $ だったり @ だったりするので
それだけ注意して変数をさかのぼって行くとか
お節介だけど$showpnameのif文、通らない場合に開始<tr>タグ欠けるよ
0263デフォルトの名無しさん
2007/04/15(日) 01:03:420264デフォルトの名無しさん
2007/04/15(日) 01:56:12エスパーのおいらが予測するには、>>255 が挙げた箇所の次に
} else {
という行があり、その後の部分が問題の部分なんだろうな。
0265デフォルトの名無しさん
2007/04/15(日) 06:52:58「type="select"」あたりで検索すれば、該当個所の近辺の
コードに当たるんじゃないか?
0266265
2007/04/15(日) 06:55:310267デフォルトの名無しさん
2007/04/15(日) 23:51:49実は前任者さん、その書き込みの様子をモニターを通して見ておりました。
では、心に引っかかっていた辛い過去。
あの時、伝えられなかった想いを今、、、
0268デフォルトの名無しさん
2007/04/16(月) 00:50:06これからの初心者は、今の時代に合った言語を使ってくれ・・・
・・以上
0269デフォルトの名無しさん
2007/04/16(月) 00:53:480270デフォルトの名無しさん
2007/04/16(月) 01:04:26Whitespaceだろ。
0271デフォルトの名無しさん
2007/04/16(月) 04:53:46Perlは消えなくていい。PHP、頼むから消滅してくれ。
0272デフォルトの名無しさん
2007/04/16(月) 04:56:250273デフォルトの名無しさん
2007/04/16(月) 06:08:15皆さんどうもありがとうございます。参考になりました!
ここで皆さんにお聞きするにはあまりにも自分が無知すぎて申し訳ないです。
更新は休みの土日しかできないので、来週までに色々調べてまた挑戦します。
>>262さん
なるほど…
<tr>タグの件、ご指摘ありがとうございます!
>>263さん
書き直すなんて絶対無理ですので頑張って解読したいと思います…
>>264さん
} else { って部分あります!!
その部分に注意してみます。
>>265さん
検索ですね。htmlがperlの中にあるので試してみます!
>>267さん
実は前任者とは全く面識がないので、あの時も何もあったもんじゃない、って感じなのですが…
0274デフォルトの名無しさん
2007/04/16(月) 14:16:33すんげー今更だな
google出来た頃から規約に書いてあるし
http://www.google.co.jp/accounts/TOS
0275デフォルトの名無しさん
2007/04/17(火) 06:50:020276デフォルトの名無しさん
2007/04/17(火) 06:59:52ってあるからなぁ
0277デフォルトの名無しさん
2007/04/17(火) 13:36:22$var = 010203 とあります
これを
$var = 01/02/03
このように2桁ごとにスラッシュを入れるにはどうしたらよいでしょうか?
0102 や 01、01020304 の場合などどの桁数にも対応したいです
0278デフォルトの名無しさん
2007/04/17(火) 13:43:510279デフォルトの名無しさん
2007/04/17(火) 15:07:07できました
0280デフォルトの名無しさん
2007/04/17(火) 15:48:19s{([0-9]{2})}{$1/}g
とかの方が良い気がする
0281デフォルトの名無しさん
2007/04/17(火) 16:06:260282デフォルトの名無しさん
2007/04/17(火) 16:11:380283デフォルトの名無しさん
2007/04/17(火) 16:44:03かな
0284デフォルトの名無しさん
2007/04/17(火) 17:15:38perl -le '$var = qq{010203} ; print join q{/}, ( $var =~ /(\d{2})/g )'
0285デフォルトの名無しさん
2007/04/17(火) 19:37:560286デフォルトの名無しさん
2007/04/17(火) 19:46:31$ perl -e 'use utf8; print q[0] =~ /\d/'
1
0287デフォルトの名無しさん
2007/04/17(火) 22:03:190288デフォルトの名無しさん
2007/04/17(火) 22:40:333桁区切りにカンマをつけるというのがよくあるから
それを参考に好きなの使えば?
0289デフォルトの名無しさん
2007/04/17(火) 22:57:26答えはそれでいいんだろ?
0290デフォルトの名無しさん
2007/04/17(火) 23:59:03質問者の出してる例はそうは言ってないぞ。
0291デフォルトの名無しさん
2007/04/18(水) 03:02:24Date::Manipでできんじゃね?
0292壁| x ・)つ○
2007/04/18(水) 03:09:07for ($i = 2; $i < rindex($var, ""); $i += 3) {
substr($var, $i, 0) = "/";
}
0293デフォルトの名無しさん
2007/04/18(水) 12:07:560294デフォルトの名無しさん
2007/04/18(水) 12:18:500295デフォルトの名無しさん
2007/04/18(水) 13:07:55人間の読み書きの部分で効率悪いと思う
0296デフォルトの名無しさん
2007/04/18(水) 14:36:580297デフォルトの名無しさん
2007/04/18(水) 14:43:010298デフォルトの名無しさん
2007/04/18(水) 16:53:45$2なんてないじゃん
0299デフォルトの名無しさん
2007/04/18(水) 17:11:53なにを言っているんだお前は。
0300デフォルトの名無しさん
2007/04/18(水) 17:40:37> perl -e "q/123/ =~ /(\d)(?=\d)(\d\d)/; print $2;"
23
そもそも、(?= )はゼロ幅先読みだろう。
> perl -e "q/123/ =~ /(\d)((?=\d))/; print $2;"
(出力なし)
0301デフォルトの名無しさん
2007/04/18(水) 20:54:57・)つ● ←おれいのしな
0302デフォルトの名無しさん
2007/04/19(木) 10:56:55そのとおり。適切な指摘ありがと。書いてから気がついた。
>>283か、
s|(\d\d)(?=\d)|$1/|g
みたいな感じで。
0303デフォルトの名無しさん
2007/04/19(木) 22:59:05open IN , ">$failename";
print IN , "test;
close IN;
で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz
助けてエロい人
0304デフォルトの名無しさん
2007/04/19(木) 23:02:26> で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz
さあ、「なんかうまく言ってくれないんです」の「なんか」を推定するクイズです!!
0305デフォルトの名無しさん
2007/04/19(木) 23:08:280306デフォルトの名無しさん
2007/04/19(木) 23:11:10Windows で \ 記号がディレクトリ名の区切りなもんだから
ダブルクォーテーションで括っただけだとエスケープと
解釈されちゃって変な文字列完成。→オープン→エラー。
そんなファイルはねえよヴォケと $! に入っている。
0307デフォルトの名無しさん
2007/04/19(木) 23:34:21そもそも IN じゃなくて OUT だろうと
use Fatal qw(open close);
open my $out, '>', $filename;
print {$out}, "test";
close $out;
0308307
2007/04/19(木) 23:39:40+ print {$out} "test";
0309デフォルトの名無しさん
2007/04/19(木) 23:40:550310デフォルトの名無しさん
2007/04/19(木) 23:54:370311265
2007/04/19(木) 23:58:020312303
2007/04/20(金) 00:05:38こんな初心者をささえてくれてありがとお つω;
0313デフォルトの名無しさん
2007/04/20(金) 01:32:590314デフォルトの名無しさん
2007/04/20(金) 03:42:050315デフォルトの名無しさん
2007/04/20(金) 03:53:440316デフォルトの名無しさん
2007/04/20(金) 03:54:26最高です!!!
0317デフォルトの名無しさん
2007/04/20(金) 12:14:510318デフォルトの名無しさん
2007/04/20(金) 15:30:270319デフォルトの名無しさん
2007/04/20(金) 19:25:20print FILEA @http;
このような記述をしたら、
Variable "@http" is not imported at http-client.pl line 53.
Variable "@http" is not imported at http-client.pl line 54.
Global symbol "@http" requires explicit package name at http-client.pl line 53.
Global symbol "@http" requires explicit package name at http-client.pl line 54.
と言われました。
これは何のエラーですか!?
0320デフォルトの名無しさん
2007/04/20(金) 22:19:470321デフォルトの名無しさん
2007/04/20(金) 23:21:12Variable "@http" is not imported については、perldiagをどうぞ。
というか、「何の」もなにもperlが出しているエラーなんだからまずはここで調べるべし。
つ http://perldoc.jp/docs/perl/5.6.1/perldiag.pod
とりあえず、use strictなのに @http が生で使われているのが原因ですので、パッケージを明示的に
指定して使うか、my宣言すればいいのでは。
0322デフォルトの名無しさん
2007/04/21(土) 23:17:55ちなみに、PDFの仕様として:
・改行文字はCR,LF,CRLF,のどれでもよい。
・文字列内での改行文字はそのままのかたちで残さなければならない。
・文字列内で(見た目のために)改行したいときは \改行文字 とする。
read(FILE, $buf, 512) ってのもめんどくさそうだし、できれば while(<FILE>) で
済ましたいんですが、意味のある改行もあるしなぁ。。。
0323デフォルトの名無しさん
2007/04/22(日) 00:20:39何をしたいのか知らんが、まずCPANでPDF関係のモジュールを
サーチしたほうがいいね。
あなたがしたいことを既に実現しているモジュールがあるかもしれないし、
少なくとも、改行文字の扱い方については、ソースの中にお手本が
あると思うし。
0324303
2007/04/22(日) 04:50:29requier './jcode.pl';
sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }
ってコードがあったのですが
&jcode の後ろについている ' の意味がわかりません。
もしかして
&jcode::convert(*msg,'jis');
と同義ですか?
エディターの色分けが気持ち悪くなるので直したいです。教えてエロい人 Orz
0325デフォルトの名無しさん
2007/04/22(日) 05:35:130326デフォルトの名無しさん
2007/04/22(日) 05:37:45エロい人よりマニュアルに頼ろうよ。
<q cite="http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html">
古いパッケージ区切り子はシングルクォートでしたが、
現在はダブルコロンを使うのが推奨されています。
</q>
http://mikeneko.creator.club.ne.jp/~lab/kcode/jcode.html#h2-2
0327324
2007/04/22(日) 11:13:18Jcodeの使い方も含めて勉強してきます ><ノ
0328デフォルトの名無しさん
2007/04/22(日) 14:43:25Undefined subroutine &Compress::Zlib::gzopen called at /usr/local/lib/perl5/5.8.8/CPAN.pm line 5721.
何をインストールしても大体このエラーが出て失敗します。
Zlib は、
/usr/local/lib/perl5/site_perl/5.8.8/Compress/Zlib.pm
にあって、サブルーチン gzopen もありました。
また、@INC に /usr/local/lib/perl5/site_perl/5.8.8 は含まれていました。
どこに問題があるか分からないのですが、教えてもらえないでしょうか。
環境は、
OSX 10.4.9 で Perl 5.8.8 を /usr/local/bin にインストールしました。
0329デフォルトの名無しさん
2007/04/22(日) 16:09:08あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
/usr/local/bin/perl ってことに間違いはない?
0330デフォルトの名無しさん
2007/04/22(日) 16:35:51レスありがとうございます。
>あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
はい。ソースコードからインストールしたらそこにインストールされたので、
/usr/local/bin/perl を使っています。
>で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
>/usr/local/bin/perl ってことに間違いはない?
間違いないはずです。
which perl で確認しました。
CPAN.pm の該当箇所をみると、
$CPAN::META->has_inst("Compress::Zlib") で判定した後に、
Compress::Zlib::gzopen を呼び出していました。
そこで gopen がないとなる理由がよく分かりません。
> >で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
> >/usr/local/bin/perl ってことに間違いはない?
> 間違いないはずです。
> which perl で確認しました。
$env
してみると判るけれども標準ではpathが通っていないと思うですです。
PATH=/bin:/sbin:/usr/bin:/usr/sbin
@MacOSX 10.4.9
もっぺん確認してみよう♪
♯tu-ka未だに5.8.6のままなんだよなぁ。。。(´・ω・`)
$ perl -v
This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 3 registered patches, see perl -V for more detail)
0332デフォルトの名無しさん
2007/04/22(日) 17:55:38レスありがとうございます。
$env
で確認してみましたが、先頭に/usr/local/binがありました。
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin
こうなるように、以前./bash_profile に追加しました。
となると、原因は不明でしょうか?
インストールの仕方が悪かったのかなあ。
0333デフォルトの名無しさん
2007/04/22(日) 20:53:01手動で入れろ。
■ このスレッドは過去ログ倉庫に格納されています