Perl 初心者コーナー Part22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0178nobodyさん
03/04/20 15:08ID:???0179nobodyさん
03/04/20 15:21ID:???タスクマネージャーとかじゃね?
0180nobodyさん
03/04/20 18:39ID:???ってどういうエラー?
0181nobodyさん
03/04/20 18:41ID:???辞書(英和辞典)をひけばわかりそうなものだが。
0183nobodyさん
03/04/20 20:14ID:Nmb8JQyi123 → 0000123
のように、
ある数字を、7桁の文字にするにはどうすればいいのでしょうか?
0184nobodyさん
03/04/20 20:21ID:???0185nobodyさん
03/04/20 20:22ID:???sprintf
0188nobodyさん
03/04/20 21:38ID:???x_acdef.cgi にはマッチしない
abcdef.cgi にはマッチする
aacdef.csv にはマッチしない
x_aaad.csv にはマッチしない
xabcdef.cgi にはマッチする
0189nobodyさん
03/04/20 21:42ID:???0190金正日
03/04/20 21:44ID:???,rn
r「l l h. / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 、. !j |
ゝ .f _ |
| | ,r'⌒ ⌒ヽ、. │ http://www.freeweb2.kakiko.com/saitama/
,」 L_ f ,,r' ̄ ̄ヾ. ヽ. │ こんなのあったニダ
ヾー‐' | ゞ‐=H:=‐fー)r、) |
| じ、 ゙iー'・・ー' i.トソ |
\ \. l ; r==i; ,; |' .人_
\ ノリ^ー->==__,..-‐ヘ___
\ ノ ハヽ |_/oヽ__/ /\
\ / / / |.
y' /o O ,l |
0192nobodyさん
03/04/20 22:02ID:???0193nobodyさん
03/04/20 22:04ID:???$a = 'xabcde.cgi';
if($a =~ /^[^x_].*\.cgi$/){
print 'マッチしました';
}else{
print 'だめ';
}
これで「だめ」と表示されたので、失敗。
0194184==189
03/04/20 22:06ID:???0195nobodyさん
03/04/20 22:07ID:???0196nobodyさん
03/04/20 22:09ID:???if($a =~ /^[^x][^_].*\.cgi$/){
print 'マッチしました';
}else{
print 'だめ';
}
だめと表示された。やっぱ無理なのか。
すまんかった。
0197192=195
03/04/20 22:14ID:???調子に乗って答えてしまいますた。
ムズイネ・・・
0198nobodyさん
03/04/20 22:47ID:???0199nobodyさん
03/04/20 23:00ID:???0201nobodyさん
03/04/20 23:03ID:???0202nobodyさん
03/04/20 23:04ID:???5.2以降、基本的な構造とか変わりまつたか?
ライブラリ周りとか、参照とかハッシュ(連想配列だっけか?)とか・・・
0203nobodyさん
03/04/20 23:08ID:???0207nobodyさん
03/04/21 00:53ID:dkK8VA+7何処に行けば無料レンタルできますか?
0209_
03/04/21 01:37ID:???http://www.freeweb2.kakiko.com/tama/moe/hankaku06.html
http://freeweb2.kakiko.com/tama/moe/hankaku05.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku04.html
http://freeweb2.kakiko.com/tama/moe/hankaku03.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku08.html
http://freeweb2.kakiko.com/tama/moe/hankaku07.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku01.html
http://freeweb2.kakiko.com/tama/moe/hankaku02.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku10.html
http://freeweb2.kakiko.com/tama/moe/hankaku09.html
0210nobodyさん
03/04/21 01:59ID:qjNDcweN説明が間抜けでスマソ 再度朝鮮。
@dat = ();
foreach $count (0..1000000) { $dat[$count] = $count; }
と、
$count = 0;
@dat = ();
while($count < 1000000){ $dat[$count] = $count++; }
前者では、配列が 32bits整数 * 約1MB = 4MB となるのでその分のメモリを使用しているということをモニタで納得できたのですが、
後者の方では、2 倍の 8MB 程使用しているようなのです。
この場合なぜ後者は 2 倍のメモリを使用するのでしょうか?
環境はVineLinux2.6(kernel 2.4.20-0vl29.1)
Perl 5.6.1 です。
0211nobodyさん
03/04/21 17:48ID:kls4aijiabが存在するかつcdが存在するかつefが存在しないかつghが存在しない
という条件を書きたいとき
論理積などを使わず正規表現一発で現すにはどうしたらいいでしょう。
というかperlっぽい書き方はどんな感じなんでしょう。教えてください。
0216nobodyさん
03/04/21 18:25ID:???ここは初心者に慣習さえ教えるのも嫌な
臭いスレなのでこっちに行け
http://pc2.2ch.net/test/read.cgi/tech/1048519394/l50
0218nobodyさん
03/04/21 19:08ID:???0221nobodyさん
03/04/21 20:59ID:???0222221
03/04/21 21:08ID:???0223nobodyさん
03/04/21 21:47ID:???スレ違いでもないんじゃないの?
少なくともコーディングに関する質問だし。
CGIのエラーの原因を聞いてくる馬鹿よりはマシだよ。
0224nobodyさん
03/04/21 21:57ID:???0226nobodyさん
03/04/21 23:20ID:VRXCXV3jもうまくいきません。例題は以下のとおり。
【例題】
<DT><A HREF="http://www.yahoo.co.jp/">Yahoo! JAPAN</A>
<DT><A HREF="http://mailcity.lycos.co.jp/">MailCity へようこそ!</A>
<DT><A HREF="http://www.google.com/">Google</A>
<DT><A HREF="http://www.infoseek.co.jp/">インフォシーク</A>
以上のHTMLタグからURLとタイトルのみ抜き出しなさい。
【答え】
if (/<DT><a href=\"(.*?)\">(.*?)</a>/) {
$i = join (",", ($1, $2));
$i .= "\n";
push (@i, $i);
}
<DT>の一行が</A>で改行されていればこれでうまく行きますが、まったく改行されて
いない場合はそうも行きません。
if (/(<DT><a href=\"(.*?)\">(.*?)</a>)+/)
や
if (/(<DT><a href=\"(.*?)\">(.*?)</a>){0,}/)
など、いろいろ試しているのですが、どうもうまく行きません。
一行の中のパターン化された文字列のなかから、特定の文字列を複数抜き出す場合はどうすればいいので
しょうか?
よろしくお願いします。
0227226
03/04/21 23:22ID:VRXCXV3jperl内のHTMLは全て大文字にして読みかえて下さい。
0228nobodyさん
03/04/21 23:34ID:FAJq1ej9/<a href=\"(.*?)\">(.*?)</a>/i
難しくしなくてもこれでいいんじゃないの?
大文字小文字どちらもokだし。
0229226
03/04/21 23:54ID:UkhLM6bFいえ、そうではないのです。
私が訊きたかったのは、
>>226で示したとおり、<DT>から</A>までを一行として改行されているのではなく、
まったく改行されていない場合のURLとタイトルの抜き出し方を知りたかった
のです。
0230nobodyさん
03/04/21 23:55ID:mc4GwSLKwhile (/<a href=\"(.*?)\">(.*?)<\/a>/ig) {push (@i,"$1,$2\n")}
0232226
03/04/22 00:11ID:yfHpFKfLできました!
うわーい!うわーい!
ありがとうございます!
「もし<DT>...</A>に当てはまるなら」という具合で、ずっとif文に縛られて
いました・・・。すみません。でも勉強になりました!
ああ、我知らず、熱い涙が押し出されてきよる・・・(滂沱の涙)。
>>231
最初はブラウザのブックマークからURLとタイトルを抜き出すという課題を自
分に課したのです。それがうまくいって一息ついたときに、「こうするとど
うなるんだろう?」と思い付いてしまったのでした。
ゆるせよ(遠山の金さん)。
0233nobodyさん
03/04/22 01:59ID:8UmhU43Lどうすれば良いですか?
0235nobodyさん
03/04/22 04:41ID:Jj2tlT0c$rootdir = "\\newfolder";
$workdir = "\\newfolder";
if ($rootdir == $workdir) {
print "OK\n"; # 表示されます
}
if ($workdir !~ m#$rootdir#i) {
print "NG\n"; # 表示されます・・・
}
これはなぜ NG が表示されるのでしょうか?
環境は、PERL 5.6.1 を Win2000 のコマンドプロンプトで動かしています。
よろしくおねがいします。
0236nobodyさん
03/04/22 06:26ID:???# 「\newfolder」という文字列
$rootdir = "\\newfolder";
$workdir = "\\newfolder";
# 正規表現は /\newfolder/ =「[改行]ewfolder」
# 「\newfolder」という文字列は「[改行]ewfolder」にマッチしない。
if ($workdir !~ /$rootdir/) { print "NG\n" }
# 本当に改行になってしまっているか確認
$workdir = "\n" . 'ewfolder';
if ($workdir =~ /$rootdir/) { print "OK\n" }
# 対策1
$workdir = "\\newfolder";
if ($workdir =~ /\Q$rootdir\E/) { print "OK\n" }
# 対策2
$rootdir = quotemeta($rootdir);
if ($workdir =~ /$rootdir/) { print "OK\n" }
0237nobodyさん
03/04/22 07:25ID:???$rootdir = "\\newfolder";
print ">$rootdir<\n";
結果
>\newfolder<(改行)
なぜここでは $rootdir の先頭の \n が改行に展開されないのでしょうか?
と、もう一つ質問を書いたら多分分かりました。正規表現じゃないからですね
どうもありがとうございました
うーんややこしい・・・
0239nobodyさん
03/04/22 12:15ID:???ある書式にフォーマットして出力したいんですけど
なぜかエラー500がでます。
何か一般的な原因があれば教えて
0245nobodyさん
03/04/23 00:26ID:???作成しようと思ったのだが、全くの初心者のため
paerl自体の実行が失敗している。
誰かなんとかしてくれ。
0246nobodyさん
03/04/23 00:27ID:???qq/ / => 変数展開とエスケープされた文字の復活を同時に行う
正規表現担当の部分は、エスケープされた文字を元に戻してから処理する。
$pattern = '\\n_hoge';
($pattern は \n_hoge)
print "$pattern\n";
print "match!\n" if $pattern =~ /^$pattern$/;
正規表現中と、ダブルクオートの中身は、展開の仕方が違うということ。
0247nobodyさん
03/04/23 00:33ID:???cgiのパスワードの逆変換って、できるんですかー?
スクリプトはあります。変換後のワードもあります。
おねがいします。
0248nobodyさん
03/04/23 00:35ID:???0250nobodyさん
03/04/23 00:39ID:???crypt関数のdecrypt基本的に無理
仕様的には、Desはdecrypt出来るんだがperlでは出来な威実装をしてある。
あと、MD5は絶対できないといった感じ
0254nobodyさん
03/04/23 00:49ID:???元に戻す方法ある?
0257247
03/04/23 00:51ID:???まともに答えてくれたからサンクス。
13金・・・古!!!
0258nobodyさん
03/04/23 00:57ID:???0262nobodyさん
03/04/23 07:06ID:???方法がさっぱりわかりません。
ヒントでいいんでわかりやすく教えてください。
お願いいたします。
0263nobodyさん
03/04/23 07:40ID:???ttp://member.nifty.ne.jp/hippo2000/perltips/LWP.html#An_Example
0264nobodyさん
03/04/23 08:58ID:???0268nobodyさん
03/04/23 16:32ID:???今、Perlのコメント部分を削除するスクリプトを組んでるんですが、
#から始まる文字を削る事はできるのですが、
$#演算子まで削られてしまいます。
$len =~ s/((\$#)*.*)#.*$/$1/g;
・・・と、こんな事もしてみたのですが、ダメでした・・・
どんな風に表現すれば、$#を削らずに行けるでしょうか?
よろしくお願いします。
0269nobodyさん
03/04/23 17:12ID:???while(<PERLFILE>){
if($_ =~ /^#/){ $_ = ''; }
#出力処理
}
じゃ駄目ですか?
0270nobodyさん
03/04/23 17:14ID:???$len = <<'EOL';
my @array = ('a' ,'b', 'c'); # コメント1
print STDOUT @array if $#array > 1; # コメント2
# push(@array, 'ぬるぽ');
EOL
$len =~ s/(?<!\$)#.*//gm;
print STDOUT $len;
# ----出力結果----
my @array = ('a' ,'b', 'c');
print STDOUT @array if $#array > 1;
# ----出力結果----
0272nobodyさん
03/04/23 17:43ID:???>>270
>>271
お答えいただきありがとうございます。
正常に動くようになりました・・・が、
(?<・・・)←これってなんですか???
(?=・・・) とか (?!・・・) とかなら分かるのですが・・・
本にも載ってない・・・
よろしければ、お答えを・・・
0273272
03/04/23 18:41ID:???しかし・・・ラクダ本にも載ってなかった・・・
なぜ???探し方が悪かったのかな・・・???
とにかく、ありがとうございました。
0274nobodyさん
03/04/23 18:51ID:???最弱者である自分には甘いの?
■ このスレッドは過去ログ倉庫に格納されています