Perl コーディング初心者質問コーナー Part25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0598nobodyさん
03/07/13 22:11ID:???0599nobodyさん
03/07/13 22:28ID:???知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
0600nobodyさん
03/07/13 22:51ID:???0601nobodyさん
03/07/13 23:06ID:???0603nobodyさん
03/07/14 00:22ID:???自作自演(>>578)してまで逆ギレ(>>565)する初心者丸出し(>>587)の人が多いよね・・・。
0604nobodyさん
03/07/14 01:51ID:???0605nobodyさん
03/07/14 02:50ID:???0608nobodyさん
03/07/14 03:31ID:???ふつーにperldoc -f [command] だろ。
あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
0609nobodyさん
03/07/14 03:56ID:???すげー暇な時に、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
からHTMLヘルプ作ったので、それ使ってる。
0610556
03/07/14 04:41ID:???いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。
まぁ、cygwin使うという手もあるのだろうけど。。。
>>609
いいですね、これ。
使わせていただきます。
0614nobodyさん
03/07/14 10:11ID:???0615nobodyさん
03/07/14 11:20ID:???0616nobodyさん
03/07/14 11:31ID:???で、Windows版にもperldocはある。
というかインスコしたディレクトリのbin見れ。色々入ってるから。
あとhtml以下もな。
0618nobodyさん
03/07/14 11:50ID:???0619nobodyさん
03/07/14 12:24ID:???unlink<./tmp/*>が使えないのですが、
別の手段(opendir?)で、
./tmp/* にあるファイルを削除する方法はないでしょうか?
perldocの日本語版はないけど、有志で翻訳しようというプロジェクトがあるよ。
http://perldocjp.sourceforge.jp/
>>619
標準モジュールのFile::Pathを使う。
0621nobodyさん
03/07/14 12:55ID:???0623nobodyさん
03/07/14 14:41ID:???SSIの動作が異なっているために実行されません。。
SSI実行時のカレントディレクトリが異なっているようです。
サーバ側の設定などで修正は可能ですか?
ファイルの修正は多すぎて大変なので・・・。
解決策をご存知の方教えてください。
0624nobodyさん
03/07/14 14:54ID:???CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
0625nobodyさん
03/07/14 15:08ID:???foreach (@tmp) {
print 'person='. $ORG[$_]->{person}. "\n";
print 'adana='. $ORG[$_]->{adana}. "\n";
print 'adanaid='. $ORG[$_]->{adanaid}. "\n";
}
で、
なぜ、sortのときには
${ORG[$a]->{adanaid}}
なのに、printのときは、
$ORG[$_]->{adanaid}
のようになるのでしょうか?
つまり、なぜ
@tmp = sort { ($ORG[$a]->{adanaid} <=> $ORG[$b]->{adanaid}) } 0 .. $#ORG;
ではダメなんでしょう?
このときの{}にはどんな意味があるのでしょうか?
0626nobodyさん
03/07/14 16:31ID:hPGUS4Ez0の数字が4つ入っていた場合と
指定したいんですが、
どうやれば良いのか、教えて下さい。
0627nobodyさん
03/07/14 17:06ID:???#..
}
${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。
ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。
# というか、そんな奇怪な構文があったなんて知らなかった…
>>626
なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
0630nobodyさん
03/07/14 17:31ID:???・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい
@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
0631nobodyさん
03/07/14 17:33ID:???これでもいけるだろ。
0632nobodyさん
03/07/14 17:37ID:???>>1 の
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
これを示してくれ。最低でも
1: 自 分 は こ う 言 う 事 が し た い。
って事をはっきりと解りやすく書いてくれ
0633nobodyさん
03/07/14 17:49ID:???2: それで意味不明な質問を書き込んでみたが、
3: スルーされてうまくいかなかった
0634nobodyさん
03/07/14 20:20ID:???@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
ここ
@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;
のほうがよかないか?
0635634
03/07/14 20:49ID:???あと、続きもこうなるな・・・
foreach (@tmp) {
print 'person='. $_->{person}. "\n";
print 'adana='. $_->{adana}. "\n";
print 'adanaid='. $_->{adanaid}. "\n";
}
取敢えず、リファレンスの使い方がおかしいということで・・・
0636nobodyさん
03/07/14 21:28ID:???0637nobodyさん
03/07/14 21:45ID:???0638nobodyさん
03/07/14 22:01ID:???って思ってたら間違いに気づいた。
@tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG;
それと、
${ARRAY[$index]->{$key}}
についてだけど。これは、${hogehoge}の発展形で、
文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、
Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、
その、デリファレンスという言い方は少しおかしい。
他に適当な言葉が思いつかなかったからさ。
それにしても
${ARRAY[$index]->{$key}}
ってよく使われるんだろうか?
一瞬なにやってるのか分からなかったよ。
0640nobodyさん
03/07/14 22:12ID:???0641nobodyさん
03/07/14 22:13ID:???そもそも、その書き方は正しいのだろうか…
0642nobodyさん
03/07/14 22:15ID:???0644nobodyさん
03/07/15 00:09ID:???0645nobodyさん
03/07/15 00:43ID:???こういう時は使う。
http://pc2.2ch.net/test/read.cgi/tech/1053053082/146-148n
私ゃ普段からデリファレンスは常に %{$hash_ref} みたく冗長に書くなぁ。
その方が入れ子になった時でも統一感が出る。
ソフトリファレンスを使う時は no strict 'refs' が入るし
%{"$hash_name"} みたくダブルクォートや . 演算子使って明示。
0646nobodyさん
03/07/15 01:22ID:m9/vaFbn早くも夏房の季節ですか(プゲラ
0647nobodyさん
03/07/15 02:57ID:???if ($ENV{REMOTE_HOST} eq $ENV{REMOTE_ADDR} or $ENV{REMOTE_HOST} eq '') {
$HOST
= gethostbyaddr(pack('C4',split(/\./,$ENV{REMOTE_ADDR})),2)
or $ENV{REMOTE_ADDR};
} else {
$HOST = $ENV{REMOTE_HOST};
}
という感じで、$ENV{'REMOTE_HOST'}に相当する文字列を抜き出す所までは
できるようになったのですが、そこからドメイン名のみを抜き出す方法が
思いつかず、困っています。
上の文の直後に
if ($HOST !~ /jp$/i) {
&jpigai();
}
といった分岐を入れたので、$HOSTに代入される文字列は全て"*.xxxx.??.jp"
といった形式だと思ってください。
その"*.xxxx.??.jp"の、xxxxの部分のみを取得して、別の変数に入れて
おきたいということです。
後方6文字目のピリオドから、次のピリオドまでの範囲を抜き出すことになるので
後方一致の$を使えば、なんとかなるのではないか?、という所までは
今の所思いついているんですが、そこから先がどうにも……。
perlを触って、まだ間もない者ですが、宜しくお願いします。
0648nobodyさん
03/07/15 04:04ID:???0649647
03/07/15 06:37ID:???おおお……しかもご親切なことに、$bの中には!
([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。
2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
0651nobodyさん
03/07/15 10:13ID:???0652nobodyさん
03/07/15 10:28ID:???0653山崎 渉
03/07/15 11:05ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0654nobodyさん
03/07/15 12:25ID:BbnXwsym0655nobodyさん
03/07/15 14:08ID:???よって行単位でソートをかけるときはどういうやり方がありますか?
0656nobodyさん
03/07/15 14:21ID:???0658nobodyさん
03/07/15 14:40ID:???そういうデータは他のソフトでも普通に処理できるのだろうか。
0659nobodyさん
03/07/15 14:47ID:???0660nobodyさん
03/07/15 15:08ID:???とりあえずRDBか何かに置き換えることをお勧めするよ。
そうじゃなくて、このCSVファイルを処理すること自体が目的だとしたら……
先頭要素、ファイルポインタ、行サイズあたりを記録していって2パスで処理とか?
0661nobodyさん
03/07/15 16:02ID:???open CSV, '<' . $file or die;
my @line;
{
my $pos = 0;
while (<CSV>) {
/^(\d+)/;
push @line, "$1\t$pos";
$pos = tell;
}
}
for (sort { $a <=> $b } @line) {
/(\d+)$/;
seek CSV, $1, 0;
print scalar <CSV>;
}
0662atom
03/07/15 17:12ID:3ahZXwjC$tag =~ s/\<.*>$//g
で置換すると
あああ<B>いいい</B>が
あああになります。
これを
あああいいいと変換したいのです。
0665nobodyさん
03/07/15 17:57ID:???どうすれば良いのでしょうか。
Jcode::convert(\@file,'utf8');
とかやったのですがやっぱりダメなようで…。
0666nobodyさん
03/07/15 18:34ID:???0667nobodyさん
03/07/15 18:41ID:???0672nobodyさん
03/07/15 22:34ID:???<IMG SRC="xx.gif" ALT="がんばった!o(>_<)o">
これなら納得いくか?
0674673
03/07/15 23:21ID:???htmlspecialchar ってPHPの関数だったw
0675あぼーん
NGNG0676あぼーん
NGNG0677nobodyさん
03/07/16 00:08ID:???スレ違いだが一応突っ込んでおくか。
<q cite="http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/charset.html#h-5.3.2">
テキスト中に「<」記号を記したい場合、著者は「&lt;」(ASCII十進60)を用い、
タグの冒頭――開始タグの開始区切り子――と誤解される可能性を回避
するべきである。同様に、テキスト中に「>」記号を記したい場合、仮に二重
引用符で囲った属性値としてであっても、著者は「>」を直接記すのではなく
「&gt;」(ASCII十進62)を用い、古いユーザエージェントがこれをタグの末尾
――タグの終了区切り子 ――と誤解してしまう問題を、回避すべきである。
</q>
0678nobodyさん
03/07/16 00:23ID:???プログラマは、ユーザーが「想定外」の操作をする事も念頭においてプログラミングをしなければならない。
これ、プログラムの基礎。
0679nobodyさん
03/07/16 00:28ID:???0680nobodyさん
03/07/16 00:54ID:GrzUswHSPerlで動かすCGIの掲示板みたいな物を参考書片手に作ってるのですが
プログラム自身が新しくディレクトリーやファイルを作る方法を探してます。
色々頑張ってディレクトリーは
mkdir $setdir,$setpm;
で作れるのですが
その作ったディレクトリーの中にプログラム自身でファイルを作成する方法が
よく判らないのです。
検索してみた所【touch】なるコマンドが出てきたのですがうまく作動してくれません
根本的に間違ってるのか、困り果ててます。
なにかヒントだけでもお願いします。
0681nobodyさん
03/07/16 00:59ID:???0683nobodyさん
03/07/16 01:09ID:???100%入力ミスをしない自信があるんならいいんじゃない?
0684nobodyさん
03/07/16 01:12ID:???って文句いうユーザー入るんだろうな・・・
0686nobodyさん
03/07/16 09:19ID:???0691655
03/07/16 11:26ID:???ありがとう。きれいなコードですね。
実際の処理は>>655で書いたのと違い、
ちょっとごたついているんですが、
ファイルポジションを確保するやり方を使うことにします。
比較対象フィールド(複数)の保持だけなら
今回はメモリの制約にかからないので。
これは個人的な質問ではありませんが、
もし比較対象フィールドを確保しようとするだけで
メモリの制約にかかる場合は、どういうやり方が考えられるでしょう?
>>686さん
0692nobodyさん
03/07/16 11:47ID:iP2fRAb3プロバイダはCGIの動作を見てから
使用許可を出すと言っています。
それで自宅サーバー構築を思い立ったのですが
自宅ではテスト環境が出来たんですが
先方に見せる事が出来ないんでしょうか。
CATVでプライベートIPアドレスとやらなので、
自宅サーバーを公開できない様ですが、本当ですか?
CGIテスト環境を貸してくれる所とかあるんでしょうか?
結構行き詰まってます。宜しく...。
0693nobodyさん
03/07/16 11:49ID:???0694nobodyさん
03/07/16 11:52ID:???>>692
動作確認する必要があるというなら、向こうでやってくれるんじゃないの?
どっかに置いてあるのを外から見ただけじゃ何もわからんと思うんだが。
■ このスレッドは過去ログ倉庫に格納されています