Perlコーディング初心者質問スレ Part 47
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/01(水) 15:39:31ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0075nobodyさん
2006/03/04(土) 01:05:20ID:???007669
2006/03/04(土) 02:01:29ID:???>>73さん javascriptの併用もOKです。それでしたら決められた日時が来たら、再度cgiを読みこむ
といった具合にしてみたいです。
ちょっとまた調べてきます。レスをありがとうございました。
0077nobodyさん
2006/03/04(土) 02:13:12ID:8Fz2Q4U82: $hoge =~ s/%2F///g; と書いてみましたが
3: エラーが出て上手くいきませんでした。
同じようにして
$hoge2 =~ s/%3A/:/g;
は、うまくいったのでサーバの問題とかそういうのではないと思います。
よろしくおねがいします。
0078nobodyさん
2006/03/04(土) 02:15:35ID:???0079nobodyさん
2006/03/04(土) 02:17:29ID:8Fz2Q4U8うぁーん、できました。・゚・(ノД`)・゚・。
ありがとうございました
0082nobodyさん
2006/03/04(土) 04:44:18ID:???0083nobodyさん
2006/03/04(土) 05:01:24ID:???ところで、もしかしてやりたい事はこれだったりする?
$hoge =~ s{ %([[:xdigit:]]{2}) }{ pack('H2', $1) }gex;
0084nobodyさん
2006/03/04(土) 15:23:11ID:???「○○○.」○○○.jp や 「○○○.」○○○.○○○.jp のような。
$host_name =~ s/.+\.//;
ってやってみましたがうまくいきませんでした。
ご教授お願いします。
0085nobodyさん
NGNG0087nobodyさん
2006/03/04(土) 16:51:16ID:???ありがと
0088nobodyさん
2006/03/04(土) 20:33:30ID:???$omikuji = '大吉','中吉','小吉'.'吉','凶';
と指定した後に
# おみくじ
$name =~ s/おみくじ/$omikuji/g;
としているのですが、大吉しか表示されません。
どうすればいいのでしょうか?
0089nobodyさん
2006/03/04(土) 20:44:58ID:???0090nobodyさん
2006/03/04(土) 21:09:45ID:???0092nobodyさん
2006/03/04(土) 21:16:44ID:???009488
2006/03/04(土) 22:14:18ID:???みなさんありがとうございました
009576
2006/03/05(日) 00:33:38ID:???なるほど、そういうアプローチもありますね。
今なお探しているんですが、ソースを組み合わせるところまで行っていません・・。
009676
2006/03/05(日) 02:19:28ID:???同一IPアドレスから一日一回しかindex.htmlを生成しない
5日おきくらいに自動更新できればいいかなと思ったんですが、
googleのこと考えると更新のペースは早いほうがいいと判断したためです。
これで正常動作したら完成です。
レスしてくれた皆様、ありがとうございました。
0097nobodyさん
2006/03/05(日) 02:22:34ID:???0098nobodyさん
2006/03/05(日) 18:43:40ID:???if ($1 ne "1") { print "hage"; }
条件に1か2でない場合hageを実行したいのですが
if ($1 ne "1”) { 処理内容 } elsif ($1 ne "2") { 処理内容 } else { 処理内容 }
これだと3つ処理内容が分割されてうまくいきません
条件が2つ実行内容は1つの場合どういう分がいいのでしょうか?
0099nobodyさん
2006/03/05(日) 19:10:38ID:???if (($1 ne "1") or ($1 ne "2")) {print "hage";}
たぶんやりたいのは
if (($1 ne "1") and ($1 ne "2")) {print "hage";}
0102nobodyさん
2006/03/05(日) 19:45:31ID:???0103nobodyさん
2006/03/05(日) 22:15:53ID:???0104nobodyさん
2006/03/05(日) 22:21:35ID:???0105nobodyさん
2006/03/05(日) 22:26:02ID:???ほかは知らん使ったことないので
0106nobodyさん
2006/03/05(日) 22:26:31ID:???0108nobodyさん
2006/03/05(日) 22:28:53ID:???0112nobodyさん
2006/03/05(日) 23:16:44ID:???0113103
2006/03/05(日) 23:19:42ID:???0114nobodyさん
2006/03/05(日) 23:23:40ID:???前レスから12秒・・・コレでなにも読めないか?
難儀だなオイ
0115nobodyさん
2006/03/05(日) 23:24:52ID:???0116nobodyさん
2006/03/05(日) 23:29:40ID:???Perl provides "and" and "or" operators.
The short-circuit behavior is identical.
The precedence of "and" and "or" is *** much lower ***, however,
so that you can safely use them after a list operator
without the need for parentheses.
-- "perlop" man page
0117nobodyさん
2006/03/05(日) 23:30:19ID:???この流れのおかげだ。
0118nobodyさん
2006/03/05(日) 23:31:22ID:???/regexpA/ .. /regexpB/;
/regexpA/ ... /regexpB/;
下の時に使う奴だね。
0119nobodyさん
2006/03/05(日) 23:45:42ID:???/regexpA/ ... /regexpA/;
の時に初めて存在価値があるわけだが。
0120nobodyさん
2006/03/06(月) 11:21:16ID:???0121nobodyさん
2006/03/06(月) 12:01:55ID:???0122nobodyさん
2006/03/06(月) 16:10:02ID:???0123nobodyさん
2006/03/06(月) 17:03:49ID:???0124nobodyさん
2006/03/06(月) 19:32:55ID:???0125nobodyさん
2006/03/06(月) 20:31:38ID:???0126nobodyさん
2006/03/06(月) 22:27:03ID:???とりあえずActivePerlを入れて、blogのTopPageのDesignだけはCompleteしました
0127nobodyさん
2006/03/06(月) 22:40:18ID:???0128nobodyさん
2006/03/06(月) 23:31:12ID:???そ、お前
何か質問無いの?
0129nobodyさん
2006/03/07(火) 00:15:38ID:???0130nobodyさん
2006/03/07(火) 00:26:19ID:???美味くて独創的なのがいい。
0131nobodyさん
2006/03/07(火) 03:44:15ID:???余ったお湯を捨てる (捨てるお湯の量が多いと味が薄くなるから気をつける)
温泉卵をぶち込む
軽くかき混ぜて食す
( ゚Д゚)グラッチェ
0132nobodyさん
2006/03/07(火) 07:11:14ID:???0133nobodyさん
2006/03/08(水) 10:57:35ID:???質問なのですが、たとえば、
@aray1 = ("abc","AAAabcBBB","CCCabcDDD","\n");
foreach $line (@aray1){
$line =~ s/abc/xxx/g;
push(@aray2,$line);
}
print join(":",@aray1);
print join(":",@aray2);
と書いた場合、
>abc:AAAabcBBB:CCCabcDDD
>xxx:AAAxxxBBB:CCCxxxDDD
と出力されると記憶していましたが、実際には、
>xxx:AAAxxxBBB:CCCxxxDDD
>xxx:AAAxxxBBB:CCCxxxDDD
と出力されました。perlのバージョンは5.8.7です。
ぐぐったりしてみたんですが、perl4から5に変わるときに、上のコードの場合で言うところの$lineが、配列@aray1の値が代入されるんじゃなくて、実体を参照するようになったような、そうじゃないような曖昧な情報しか見つけられませんでした。
配列の値が代入されるって言い切ってるサイトもあるし。だとすれば上のようなコードで@aray1の中身まで置換されるのおかしいし。
実際のところ、
・perl4からperl5に上がった時に変更になった
・元々そうだった
・その他(コード自体に問題あり)
…
どうなんでしょうか?
わかる方いらっしゃいますでしょうか?
0134nobodyさん
2006/03/08(水) 11:29:56ID:???Perl4 の頃からそういう仕様だが。
<q cite="http://flex.ee.uec.ac.jp/texi/perl/perl_13.html#SEC32">
配列値が(配列値を返す expression ではなく)実際の配列の場合は、
ループの中で変数を変更することで配列要素を変更することができる。
</q>
0135nobodyさん
2006/03/08(水) 13:05:53ID:???の行を下記2行に書き換えてごらんあれ
foreach (@aray1){
my $line = $_;
0136133
2006/03/08(水) 13:44:41ID:???>> 135
早速の回答ありがとうございます。
そうですか…perl4時代から既にそうだったんですね…orz
自分の無知を恥じます。
ところで、となると、foreachは与えられた配列の個々の要素の値をスカラー変数に「代入する」という表現のwebが散見されますが、この表現は間違いということなんでしょうか?
0137nobodyさん
2006/03/08(水) 13:46:53ID:???print "@hoge";
の時
a.b.c.d
みたいに間に「.」をいれて取り出したいんですがどのような書き方が最適でしょうか?
ご指導ご鞭撻のほどを
0138nobodyさん
2006/03/08(水) 13:57:11ID:???0139nobodyさん
2006/03/08(水) 15:14:48ID:???正規のドキュメントと違う事を書いてる二次情報は間違いなんじゃない。
正規のドキュメントにツッコミ入れられるレベルの人なら書いた人に連絡
取るだろうし。
>>137
普通は >>138 のようにした方がいいけど
{ local $" = '.'; print "@hoge"; }
というやり方もある。
0140nobodyさん
2006/03/08(水) 15:39:20ID:???続けざまで申し訳ないんですが
require 'cgi-lib.pl'
&ReadParse(*in)
@hoge = @in('a','b','c');
で@hogeの値を取った場合
もしa(@hoge[0])に値が入れられてなかったら,をいれないみたいな処理
はできるでしょうか?
>>138さんのやり方でやるってみたのですが
,b,c
みたいになってしまいます
0141133
2006/03/08(水) 15:54:17ID:???おっしゃるとおりで。
探しやすさとか読みやすさにかまけて正規ドキュメントのチェックを疎かにしてた僕が居ましたYO!って感じです。
勉強になりました。
0142nobodyさん
2006/03/08(水) 16:13:07ID:???>133みたく
foreach $aaa (@list){
ってやった場合、$aaaには実態じゃなくてリファレンスが入ってた
$aaaを別の値にしたら@listの内容も変った
0143nobodyさん
2006/03/08(水) 19:09:21ID:IC708NPT投稿された内容を表示する際、
投稿内容にアドレスがあればそれをそのアドレス先のリンクに置き換えたいと思っています。
まず、投稿内容から"http://"を探して次にそのアドレスの終わりを見つけ
アドレスの最初から終わりまでを置換しようとしています。
投稿内容から"http://"はindexをつかって見つけることが出来たのですが、
どうすればアドレスの終わりを見つけるのかが分かりません。
どのようなにすればアドレスの最初から終わりまでの位置を見つけることが出来ますか?
0144nobodyさん
NGNG0145nobodyさん
2006/03/08(水) 19:30:45ID:???0146nobodyさん
2006/03/08(水) 19:48:33ID:???文法が怪し過ぎるので一から勉強し直してくれ。
http://www.site-cooler.com/kwl/perl/2.htm
@hoge = grep defined && length, @in{'a','b'.'c'};
>>142
「リファレンスが入っている」とはこういう状態を指すんだけど。
print "$_\n" for my @ref_array = \(0..9);
print "$_\n" for my @num_array = (0..9);
実体に「別名」を付ける時は「エイリアス」と表現する事が多い。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsyn.html#Foreach_Loops
>>143
http://www.din.or.jp/~ohzaki/perl.htm#AutoLink
0147nobodyさん
2006/03/08(水) 21:45:07ID:???あ〜そうそれ
エイリアスってやつ
言葉間違えたorz
0148143
2006/03/08(水) 22:04:58ID:IC708NPTリンクに置換することが出来ました。
ありがとうございます。
0149nobodyさん
2006/03/10(金) 14:44:19ID:Uu8wqJhR変数「$daylimit」にaaaa/bb/cc(またはaaaa/b/c)の形で日付が格納されています。
これを元にソートしたいのです。
そこで疑問が2つあります。
1.aaaa/bb/ccからスラッシュを抜く方法(aaaa/bb/cc→aaaabbccにする)
2.1月または1日などの10の位がない時に0を付け足す方法(aaaa/b/c→aaaa0b0c)
これはどのようにしたら良いのですか?
方法を教えてください。お願いします。
0150nobodyさん
2006/03/10(金) 14:51:12ID:???ちなみに日付は文字列順になるから/は抜かなくてもおk
0151ヽ(´ー`)ノ ◆.ogCuANUcE
2006/03/10(金) 14:53:34ID:???1. split('/', $daylimit)
2. sprintf('%04d%02d%02d', split('/', $daylimit))
sort する時は sprintf() した結果を cmp で比べるといい。
0152nobodyさん
2006/03/10(金) 15:00:19ID:Uu8wqJhRということは、
$daylimit2 = sprintf('%04d%02d%02d', split('/', $daylimit)) ;
として、$daylimit2でソートしたらOKって事ですね。
ありがとうございました。
0153nobodyさん
2006/03/10(金) 20:49:15ID:???0154nobodyさん
2006/03/10(金) 20:55:15ID:???0155nobodyさん
NGNG0156nobodyさん
2006/03/11(土) 01:02:36ID:???よくある商品を選んだら注文フォームに飛ぶHPを作りたいのですが
注文フォームで すでに商品名が入力済みの形を取っている
を実現したいのですが
よろしくお願いします
0157nobodyさん
2006/03/11(土) 01:14:18ID:???0158nobodyさん
2006/03/11(土) 01:24:04ID:???type="text" なら、input のvalue に商品名入れな
0159nobodyさん
2006/03/11(土) 01:32:55ID:???質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0160156
2006/03/11(土) 02:44:05ID:???まずタグから勉強して出直してきます
0161nobodyさん
2006/03/11(土) 03:03:59ID:2NEkCx5lソースに use encoding が入っていると、
デバッガ動かしたときに
「問題が発生したため、Perl Command Line Interpreter
を終了します。ご不便をおかけして申し訳ありません。」という
ポップアップが出てしまいます。
(-d 無しだと普通に動く)
インストールやりなおしたりしたんですが現象変わりません。
なぜ??
0162nobodyさん
2006/03/11(土) 04:37:32ID:???0163nobodyさん
2006/03/11(土) 05:06:27ID:???バグデータベースにも登録されてる。
ttp://bugs.activestate.com/show_bug.cgi?id=39261
漏れは回避方法知らん。
>>162
参考までに貴方の開発環境をお聞かせ願いたい。
cygwinのperl?それともPCのOSにLinuxかBSD辺りを常用してるとか?
0164nobodyさん
2006/03/11(土) 05:36:10ID:???0165nobodyさん
2006/03/11(土) 05:42:46ID:???> 参考までに貴方の開発環境をお聞かせ願いたい。
> cygwinのperl?それともPCのOSにLinuxかBSD辺りを常用してるとか?
VMware とか colinux とか知らない馬鹿ワロス
0166nobodyさん
2006/03/11(土) 06:04:34ID:???そうか、貴方はスクリプトを書いては一々仮想マシン上に移してテストしてるのか。
VMwareの共有フォルダ機能やSambaでも使って手軽にやってるのかな。
若しくは自動でFTP経由で変更分をアップロードするスクリプトでも組んでるか。
参考になった。ありがとう。
0167nobodyさん
2006/03/11(土) 06:23:19ID:???> そうか、貴方はスクリプトを書いては一々仮想マシン上に移してテストしてるのか。
> 若しくは自動でFTP経由で変更分をアップロードするスクリプトでも組んでるか。
その機械に ssh なり何なりでログインして書くという方法もありますよ?
0170nobodyさん
2006/03/11(土) 09:48:52ID:???0171nobodyさん
2006/03/11(土) 11:10:44ID:???0172nobodyさん
2006/03/11(土) 16:05:01ID:???my $mail=$form->Get('mail');
my $adc;
my $randam=int(rand(15));
if ($randam < 1){ $abc = q| ☆☆☆☆☆ | }
elsif ($randam < 2) { $abc = q| ☆☆☆☆☆ | }
が15行です
☆の部分に最初は顔文字が入って、正常に動いてたのですが
日本語に入れ換えたらエラーが出てうまくいきません
日本語で30文字ぐらい(改行有り)赤色の文字色で表示させたいのですが、どのように記述したらよろしいでしょうか?
puleは全然わからない初心者ですがよろしくお願いします
0173nobodyさん
2006/03/11(土) 16:18:52ID:???puleはヒドイ・・・
q|〜|は好きな記号をクォートにする構文。
この場合 | を使ってるので文字列中に | があれば問題になる。
sjis使ってるならこれらの文字の下位バイトも問題に。「−ポл掛弓芸旨酢掃竹倒怖掟」(一例)
q{〜}とかq!〜!とかq(〜)とかに変える。
あとはエラーメッセージの最後にエラー行載ってるからそれを参考に。
0175nobodyさん
2006/03/11(土) 17:14:12ID:???酷すぎる
■ このスレッドは過去ログ倉庫に格納されています