Perlコーディング初心者質問スレ Part 51
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/07/27(木) 17:04:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
ご親切にどうも ありがとうございます.
MacPerl で local check をやっている関係で
delimiter の違いが (思い違いの) 原因でした.
"できる" と解っただけで方向性が決まりました.
んで, (骨組みだけ) 無事成功しました !
申す訳ねぇ〜デスだ.
すれ違い気味に OS10.3 って今でも手に入ります ?
なんか, 10.4 の評判はいまいちみたいなので...
OS さえ手に入れば爺さんに鞭打って...
0859nobodyさん
2006/09/06(水) 01:12:56ID:???0860nobodyさん
2006/09/06(水) 02:06:39ID:???0861nobodyさん
2006/09/06(水) 03:34:58ID:KUgOOpEJreturn 0;
}
for( my $n = 0; $n < @w; $n++ ) {
if( $w[$n] == $d ) {
return $n;
}
}
return -1;
これ↑と同じ処理を、1行か2行で書けないでしょうか?
0862nobodyさん
2006/09/06(水) 04:11:01ID:???return $d == -1 ? 0 : (@_ = grep { $_ == $d } @w) ? $_[0] : -1;
自分の分からないコードを書くと保守性が下がるよ。その点注意。
0863nobodyさん
2006/09/06(水) 06:01:51ID:???まあ、grep 部分を grep { $w[$_] == $d } 0 .. $#w に
すりゃいいだけだけど。
0864nobodyさん
2006/09/06(水) 10:55:39ID:???http://pc8.2ch.net/test/read.cgi/hp/1156837689/
Perl使いの皆様、どなたかこの板違いの馬鹿どもの議論を、
一言でサラリと解決してやってください。
初心者が質問しにくい状況になっていて非常に迷惑です。
論点は
『CGIファイル(CGIスクリプト)はプログラムであるか?』
ということらしいです。
これだけだと、答えが出しにくいかもしれませんが
よろしくお願いします。
前スレでCGI=プログラムと言い出していたものがいて、
それが尾を引いて、わけのわからない展開になっていますが、
どなたか解決を・・・
0865nobodyさん
2006/09/06(水) 11:03:36ID:???いらん話を他スレに持ってくるな。
0869nobodyさん
2006/09/06(水) 16:18:30ID:???勿論反応してるのもね。
召喚されてるように聞こえる...
それはさて置き, とりあえずマジレス.
ここで言うのもアレだけど perl って知れば知るほどアレルギー反応が...
要するに目的を達成するために しかたなくやってるだけで深く追求したくない.
したがって居座るつもりは さらさらありません.
さて, 結果報告 :
nifty は やっぱり だめぽ でした.
(XMLHttpRequest は "同一 domain" 限定で読み込みが可能.
nifty は見かけ上, 別サーバーのように見える)
そこで xrea で試したところ, どうにか動作はするように...
しかし あっしには理解不能なエラーが...
それでも back ボタンを押すと書き込めてるのですが...
作りかけで恥ずかしいのですがリンク貼っておきます.
alter.s225.xrea.com/hybrid/hybrid.html
思い違いかも知れないけど, 書きこみに失敗.
細かいところを作り込まなければならないので
あまり時間を浪費したくない.
そんな訳で深く原因追求してません.
0874nobodyさん
2006/09/06(水) 20:36:10ID:???エラーなんてでてないが? 直した? それとも、投稿後の画面遷移のこと?
だとしたら、JavaScript側でsubmitしてるんだから、画面遷移があるのは当たり前だろう。
どうせならform.submit()せずに、投稿もXmlHttpRequest使えばいいじゃん。何の為のAjaxなんだか。
Perlにアレルギー起こすのはいいが、JavaScriptも微妙だし、もうちょっとがんばれ。
0875nobodyさん
2006/09/06(水) 20:40:12ID:???画面遷移をなくせたはず。
どうもありがとう.
一応チェックしてますがテクニカルな話題は なさそうでふ.
>>873
print "Content-type: text/html \n\n";を
書き加えてエラーは出なくなりますた.
>JavaScript側でsubmitしてるんだから
>画面遷移があるのは当たり前だろう
よく考えれば当然なんですが見落としてました.
>投稿もXmlHttpRequest使えばいいじゃん
こちらは以前作ったサンプルを転用しました.
で, 書きこみの方は未研究です.
これでうまくいくのなら万々歳ですだ.
>確かレスポンスとして 204 No Content を返すと
さっそく調べて実験してみます.
本当に ありがとう !!!
0877nobodyさん
2006/09/06(水) 21:47:22ID:???0878876
2006/09/07(木) 18:11:47ID:4yMYFWbI色々やってみましたが, 何か勘違いしてるのか思い通りに行きません.
[やってみたこと]
1. print"Status:204 No Content\n\n";
2. print"Location:http://alter.s225.xrea.com/hybrid.html\n\n";
3. それぞれ一行空けてみたり...書きこむ場所を変えてみたり...
いっそ, 振り出しのファイルを読み込んで...
でも, やりかたが今ひとつわかりましぇ〜ん.
>>875
そんなに邪険にしなくても...
0879nobodyさん
2006/09/08(金) 01:47:11ID:???公開サーバではなくローカル・マシン上で、www.kent-web.com で配布されている
sunbbs を利用しています。このコードを眺めつつ、ちょくちょく改造しているの
ですが、投稿されたデータに http:// で始まる文字列があった場合、自動的に
その文字列にリンク・タグを追加してくれる auto_link という処理を見つけました。
<sample-1>
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=\"$2\" TARGET=\"_blank\"><B>$2<\/B><\/A>/g;
}
これを応用し、同じく sunbbs 内のワード検索サブルーチンに、ヒットした検索
キーワード部分を色付きでマーキングする処理を作ってみました。
<sample-2>
sub auto_marker {
$_[0] =~ s/$word/\<font\ color=\"\#FF0000\"\>\<b\>$word\<\/b\>\<\/font\>/g;
}
これで「おおむね」期待通りの処理をしてくれるのですが、検索キーワードの中に、
ひらがなやカタカナの長音記号「ー」が含まれていると、記事はヒットするらしい
ものの、肝心の記事を表示してくれない、という問題に悩まされています。
ヒットする「らしい」というのは、検索結果:12件 などという結果だけはちゃんと
表示されるからです。
ちなみに、<sample-2>の処理を外すと、色付き表示は当然されないものの、ヒット
した結果はちゃんと表示されます。
このことから、自分が書いた<sample-2>の処理中に、この問題を引き起こす原因が
含まれているのではないかと判断しています。
どなたか「そこはこう書かなきゃダメじゃん」というご指摘をいただけませんでしょうか。
どうぞよろしくお願いいたします。
0880nobodyさん
2006/09/08(金) 01:53:21ID:???置換後のテキストで "<", ">", "#", 半角スペース、ダブルクォートとかは、
バックスラッシュ入れなくていい。
0881nobodyさん
2006/09/08(金) 02:31:26ID:???↓
s/\Q$word\E/
とかじゃないの?
0882nobodyさん
2006/09/08(金) 10:07:26ID:???0883879
2006/09/08(金) 18:17:53ID:???どうもです。できました。感謝です。
しかしそれはどういう意味があるのでしょう?
あと検索キーワードが一つのときはきちんと動作しましたが、
複数のキーワードを半角スペースで区切って入れた場合、
結果は正しくヒットするけれども、赤マークはされませんでした。
スペース(%20)が邪魔をしているんだろうということは分かるのですが、
それ以上のことが分からないです。
0884nobodyさん
2006/09/08(金) 19:14:56ID:???ぐぐれ
0885nobodyさん
2006/09/08(金) 21:10:52ID:???0886nobodyさん
2006/09/08(金) 22:27:06ID:d2vLYLwUフォームにフリーワードを入力させて
CSVのデータとマッチさせ、
マッチしたデータを表示させるCGIを
作成しようと思っています。
それで、yahooやgoogleのように
表示件数を○件毎という風にして、
画面の下のほうに
1 2 3 4 5 6 7 8 9 .....
と次の○件、という感じにしたいな
と考えています。
同じような仕様で、参考になるソースを
ご存知の方、居ませんでしょうか。。
0889nobodyさん
2006/09/08(金) 23:11:11ID:???quotemetaと同じそうだ。
0890nobodyさん
2006/09/08(金) 23:13:20ID:???また、件数を割って得た数が割りきれなければ総ページ数を+1する
ってとこかなぁ
0892nobodyさん
2006/09/08(金) 23:44:38ID:???わざわざNon-parsed Headerする意図が(ry
0893886
2006/09/08(金) 23:55:47ID:d2vLYLwU>>890
ご意見、ありがとうございます。
Data::Pager
HTML::Pager
ですか。恥ずかしながら始めてしりました。
勉強してみます。
最初は自分でロジックを考えて実装しようと
思ったのですが、案外難しいな。。と。
検索対象を全部HTMLソースに
吐き出して、DHTML + javasript で
表示の切り替えが出来ないかな。。なんて
ことも考えてます。
Perl経験あんまり無いので、無理にperl
で作るとソースがむちゃくちゃになりそうで。。
なやましい。。
0894nobodyさん
2006/09/09(土) 01:22:33ID:???ちなみに、経験があるのは何なの?
0895nobodyさん
2006/09/09(土) 01:39:45ID:???たとえば
my $test = "soto";
my $a = 1;
if ($a) {
print $test;
}
とすればsotoが出力されますが、
my $test = "soto";
my $a = 1;
if ($a) {
my $test = "naka";
print $test;
}
print $test;
だとnakasotoと出力されます。
myはあるサブルーチンのなかのみでしか変数を使えないようにするというのが私の理解なのですが、
この場合はどういう処理がされているのでしょうか。
仮に{}でくくられた部分内でしか変数を使えなくするというのなら最初の例に合いませんし・・・
初歩的な事で申し訳ありません。
0896nobodyさん
2006/09/09(土) 03:06:29ID:FjbM6rE4$filename = "filename.dat";
chown www,GROUPNAME,"$filename";
としても反映されません。
ユーザ:root
グループ:wheel
でログインをした状態でコマンドラインから色々試してみたところ
自分自身のユーザ・グループ以外には変更できないのですが
www,GROUPNAME とするにはどのようにしたら良いのでしょうか。
0898nobodyさん
2006/09/09(土) 04:10:20ID:???uid, gidでやっても?
chown scalar(getpwnam('www')),scalar(getgrnam('GROUPNAME')),"$filename";
0900nobodyさん
2006/09/09(土) 04:59:01ID:???auでフォームから送信すると次のページのURLに
?x-up-destcharset=17
と付くんですがなぜですか?
また、これを表示させない方法があれば教えてください。
0902896
2006/09/09(土) 05:29:02ID:???で解決して喜んではいたのですが
ユーザ名,グループ名 では駄目だった理由が知りたくて
戻って参りました...どなたかお教えください。
perl chown で検索した解説サイトではほぼ全てが
「chown ユーザ名,グループ名,ファイル名」
という説明になっているということは一般的にはuid,gid形式では
指定しないのでしょうか。
環境はFreeBSD+perl5.8.8です。
0906nobodyさん
2006/09/09(土) 10:19:37ID:???まずperldocではちゃんと数値のUID,GIDと明言されてる。
そして、素人が作ったPerl解説サイトはデタラメ書いてる場合もある。
それはそうとして、どこでどう検索したのか書いてみろ。
yahooとgoogleで「perl chown」のTOP5件チェックしたが正しかったぞ。
0907895
2006/09/09(土) 10:32:15ID:???ありがとうございます。
ファイルスコープなるものとブロックスコープなるものがあったんですね。
>>901
名前は知りませんでしたが、myはブロックスコープで動くと思っていました。
後者の出力が正しいとするなら、
前者はブロックの外でmy宣言してるのにもかかわらず、
ifのブロック内で$testが出力されているのが不思議だったのです。
0908nobodyさん
2006/09/09(土) 11:39:12ID:???スコープがネストされてる場合内側から外側のスコープが見えるよ
他の言語でも言うグローバル変数はそういう使い方
0909895
2006/09/09(土) 13:05:50ID:???知りませんでした。ありがとうございます。
{
my $block;
{・・・・・・}
{
{・・・・・・}
}
}
などでも・・・・・・の位置から$blockをみれるということですか。
ということはサブルーチンに移るときだけ気をつければいいんですね。
0911nobodyさん
2006/09/09(土) 21:10:29ID:???0916nobodyさん
2006/09/09(土) 21:38:39ID:???local $Data::Dumper::Deparse = 42 ;
とかで必要すよ義務っすよ must っすよ。
0917nobodyさん
2006/09/09(土) 21:48:54ID:???ま た コ ン パ ク ト か
0918nobodyさん
2006/09/09(土) 22:11:50ID:???{
my $x = "soto_x ";
my $y = "soto_y ";
{
my $y = "naka_y ";
print "naka: ", $x, $y, "\n";
}
print "soto: ", $x, $y,"\n";
}
{
print "yoso: ", $x, $y, "\n";
}
ファイルスコープについては、この延長で「ファイルを丸ごと取り囲む見えないブロック」があると考えれ。
サブルーチンに移る時に何を気をつけるのかは知らんが。
0919895,907
2006/09/09(土) 22:28:45ID:???localは環境変数など複数あってはいけない変数に違う値を付ける場合に必要なんですね。
>>918
分かりやすい説明ありがとうございます。
サブルーチンに移るときに気をつけるというのは
引数を渡すのを忘れて、変数を直接参照しないように
ということです。言葉足らずですみませんでした。
0920nobodyさん
2006/09/09(土) 22:29:47ID:???他にも、こういう使い方とかってしないもんかね?
my $hoge = { fuga => 1, piyo => 2 };
{
local $hoge->{piyo} = 3;
print $hoge->{piyo};
}
print $hoge->{piyo};
0921nobodyさん
2006/09/09(土) 22:58:48ID:???必然性があるならやったらいい。
しかし設計としてはほめられたもんじゃない。
そこに合理性がない上に恥じらいもないなら、少なくとも僕はそれをクソと呼ぶ。
0922nobodyさん
2006/09/09(土) 23:09:18ID:???cpan Net::Amazon
すると
Undefined subroutine &main::UpdateHTML_blib called at -e line 1.
NMAKE : fatal error U1077: 'C:\Perl\bin\perl.exe' : リターン コード '0xff'
Stop.
nmake -- NOT OK
と出てインストールできません。どうしたらインストールできるでしょうか?
ズブの素人なのでなってない質問の仕方と思いますが、
神様達の優しさに期待します。よろしくお願いします。
0923nobodyさん
2006/09/10(日) 00:17:14ID:???もしくはppmにしておきなさい
わからなければ検索
0924nobodyさん
2006/09/10(日) 12:43:26ID:???print pack ("H*","$d16")
で、$d16のなかに00が含まれているとプリントがその手前までしかされません・・・
何が原因でしょうか?
0925nobodyさん
2006/09/10(日) 13:34:34ID:???どこにprintしてるのか知らんがnullは文字列の終端。
表示する端末によっては表示が打ち切られたり、半角スペースに置き換えられて続行したり…
バイナリエディタの右側の枠のようなものを作りたいの?
0926924
2006/09/10(日) 15:17:01ID:???はい。Perlで簡易バイナリエディタを実験的に作ってみようと思いまして・・・
00は違う値に置き換えてからprint表示する必要があるのですか。
ありがとうございます。
0927924
2006/09/10(日) 15:17:52ID:???print先はモニタです。
0928nobodyさん
2006/09/10(日) 16:54:55ID:???まあモニタなのは分かるけど…
nullに限らず各制御コードは何かに置換することでエスケープするのは必要だね。
手っ取り早いのは tr/ -~/./c (US-ASCII以外を置換)とかを通すこと。
マルチバイトに対応させるならもう二捻り。
0929nobodyさん
2006/09/10(日) 17:19:33ID:JN7kssrH一文字分タイプする労力減るだろ?とか悦に入ってんの?
elseif と else if で混乱してた方がまだマシ。泣きそう。
0932nobodyさん
2006/09/10(日) 18:45:21ID:???0933nobodyさん
2006/09/10(日) 22:10:15ID:us6Jx56Pprint <<EOF
ほげほげ\n
ほげほげ\n
.
.
.
EOF
で出力すると、当然
ほげほげ
ほげほげ
.
.
.
というテキストファイルが出来、出力させたい
ほげほげ\n
ほげほげ\n
.
.
.
というようなファイルを得ることが出来ません
どのようにすれば上記の望む出力結果を得ることが出来るのか教えていただけると幸いです。
0934nobodyさん
2006/09/10(日) 22:20:08ID:???EOF が付加されるってこと? EOF って付加されたっけ。
とりあえず binmode あたりを試してみては。
0935nobodyさん
2006/09/10(日) 22:22:03ID:???改行している時点で、(見えませんが)改行コードは入っています。
改行コードではなく、"¥n" という文字が表示されて欲しいなら、
print <<EOF;
ほげほげ¥¥n
ほげほげ¥¥n
EOF
とすれば良いでしょう。
0936nobodyさん
2006/09/10(日) 22:23:57ID:us6Jx56Pありがとうございます
エスケープを重ねるんですね
試してみます
0939nobodyさん
2006/09/10(日) 22:41:36ID:9Coln3UPすげー。初めて知った。
0940nobodyさん
2006/09/10(日) 22:58:04ID:???0941nobodyさん
2006/09/11(月) 01:05:25ID:???ソケットに繋いでGET送って、
@get = <SOCKET>;
をすると、ごく希にそこで止まってしまうので、
時間切れにさせるか、もっと安全に扱いたいんだけど、
どうするのが普通ですか?
0943nobodyさん
2006/09/11(月) 01:39:19ID:???さくっとぐぐってみたら、
> タイムアウト処理ではシグナルを使うため、Windows 系サーバでは使えません。
という記述を見かけたのですが、windowsのActivePerlでは無理ですか?
0944nobodyさん
2006/09/11(月) 01:52:52ID:???0945nobodyさん
2006/09/11(月) 02:06:35ID:???0946nobodyさん
2006/09/11(月) 02:09:00ID:???The Unsupported function alarm function is unimplemented at 〜
というエラーになってしまいました
代案は何かありませんか?
0947nobodyさん
2006/09/11(月) 04:52:42ID:???携帯用の掲示板でアンカーを付けたいんですがこれだとURLが
〜〜.cgi?mode=view&No=>>番号
みたいに番号に>>が入ってしまうんですが数字のみにするには
どうしたらいいですか?
0948nobodyさん
2006/09/11(月) 05:01:11ID:???すみませんこうでした
0949nobodyさん
2006/09/11(月) 05:37:20ID:???[>>] の箇所、[] の使い方を誤解していると思われ。
正しくない正規表現からでマッチさせるべきテキストの例もないので
希望にそうか分からないが、一例を。
s/>>(\d+)/>><a href="〜〜.cgi?mode=view&No=$1">$1<\/a>/g;
0950946
2006/09/11(月) 23:55:32ID:???でも、肝心のアラームが作動してくれません
ttp://www.futomi.com/lecture/signal/alrm.html
このあたりを丸コピーしたのですが、
alarm 10;
@get = <SOCKET>;
alarm 0;
という部分でやっぱり止まります
一まとまりの処理の間でしか時間を見てないんじゃないかと思うのですが、
回避する方法はありますか?
0951nobodyさん
2006/09/12(火) 00:15:09ID:???@get = <SOCKET>;
の部分を、
for (1..100) { print "$_\n"; sleep(1) }
とかに置き換えれば、それはちゃんとタイムアウトします
0952nobodyさん
2006/09/12(火) 00:39:45ID:???0953nobodyさん
2006/09/12(火) 01:25:51ID:???ちょっと理解を超えてるので、
@get = <SOCKET>;
と同等のことをしてくれるタイムアウト処理内蔵の安全なパッケージとか
無いでしょうか
0954nobodyさん
2006/09/12(火) 04:41:17ID:???レス数が950を超えています。1000を超えると書き込みができなくなります。