くだすれPerl(超初心者用)2
at PHP
1:nobodyさん
08/03/03 05:07:32
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
2:nobodyさん
08/03/03 12:33:59
テンプレとかないの?
3:nobodyさん
08/03/03 19:13:48
>>0
あ?ほんとに分かってんのか?
「はい」ってのはな「はい、わかりました」を略して「はい」なんだよ
頭だけでわかったって言わねんだぞ?学校の勉強じゃねえんだから
社会では?お?実際に出来て初めて「わかった」言うんだ
出来もしねえ奴が軽々しくはいなんて言うんじゃねえよ
お?聴こえてんのかよコラ?あ?
やる気がねえんだったら来なくていいぞ?
お前ナメてんだろコラ?
仕事中だと思って優しく口で言ってりゃ調子に乗んじゃねえぞコラ?お?
外で遭ってたら今頃カタワだぞお前?とっくに
4:nobodyさん
08/03/03 22:02:10 F1EuYZlD
なんだ、この馬鹿?
ケツの三行が間抜けすぎるんだけどw
5:nobodyさん
08/03/07 19:19:52
とにかく、画像とか抜きにしてテキストベースでじゃんけんゲームとか数当てゲームを作ってみれば良い。
とりあえず機能的には、繰り返し挑戦出来るとか残り回数があるとか。
○○より小さいです。 って表示させたりだ。
そうすることで 判定・繰り返し・変数を大まかに理解出来るだろう。
6:nobodyさん
08/03/13 15:16:54
どのバージョンをDLしたらいいのかわかりません(WIN)
7:nobodyさん
08/03/13 21:47:41 vk+XUs64
掲示板でデータを逆順に表示するリンクをつけたいのですが
reverse リスト
をリンクとしてできるようにするにはどのようにしたらいいのでしょうか?
具体的には<a href=???>古い順</a>
といったリンクをつけたいです
8:nobodyさん
08/03/14 00:10:56 jE/64EXv
$aaa=1;
if($aaa==1||$aaa==3)
これをもっと簡潔に書く方法がわかりません。
もうひとつ、
$aaaが8nなら、というのはどうやればよいのでしょうか。
調べてもわかりませんでした、おねがいしますm(_ _)m
9:nobodyさん
08/03/14 01:46:19 sSfBLQ5N
>>7
リストをreverseさせるルーチンはあるのか?
だったらそこにジャンプさせる為の判別用の文字列をqueryで送ってやれば良し
>>8
これ直前で$aaaに1を代入してれば3になる可能性は皆無なんじゃないか?
$aaa==3 は必要無いだろ
if($aaa eq '8n')
これを調べても分からないんじゃヤバいぞ
10:nobodyさん
08/03/14 01:49:59 sSfBLQ5N
8n って文字列かと思ったじゃねぇか
あとマルチポストは控えめに
11:nobodyさん
08/03/14 11:05:45 tA8hqU0W
正規表現で>>1というようにアンカーが付くとリンクされるというのは出来たのですが、>>1のように単体でログを表示するやり方が分かりませんm(_ _)m
12:nobodyさん
08/03/14 13:36:44
先生∩
sub uniq #重複行削除
{
my %seen;
return (grep { ! $seen{$_}++ } @_);
}
sub uniqu #1回のみの行
{
my %seen;
$seen{$_}++ for @_;
return (grep { $seen{$_} == 1 } @_);
}
な感じの物を見つけたのですが、何が起きてるかさっぱり解りません。
そこで質問です。
以下は2行以上あるものだけの出力になるっぽいのですが、合ってるでしょうか?
sub uniqd
{
my %seen;
return (grep { $seen{$_}++ == 1 } @_);
}
13:nobodyさん
08/03/14 18:49:24
>>11
アンカー先のURLで記事を表示できるようにする必要ががある。
例えば<a href="./bbs.cgi?No=100">100</a>とするなら、
No100の記事をファイルから取得して表示する。
>>12
foreach(@_)としてるのと同じ感じで、配列の各値が$_に一時的に格納される。
んで{}内で$seen{$_}に1を代入してるわけ。
ハッシュのキーは重複しないので++でカウントできる。おk?
この際ついでにgrepとmapについて勉強したほうがいい。
Perlの中でも強力な部類の関数だから
14:nobodyさん
08/03/14 19:17:40
>>12
暇だから、、、
最後の質問は正解。
一番上の grep BLOCK の中だけ解説。
1. $seen{$_} で %seen に $_ が登録されてるかどうか調べる。
当然最初の一回目は無いから偽。二回目以降は真。
2. ! によって1.の条件が偽の時のみ真。
3. ++ によって $_ を %seen に登録。(++によって数値と見なされ偽を0と
解釈。で普通に1足される)。
4. 1. に戻るが、同じ物が二回目に出てくると真、なので 2. の条件に
当てはまらない。
結果、 uniq なもののみがトラップされる。
uniqu はまあ論外。uniqd は ++ の挙動さえ理解してれば問題ない。
( $seen{$_} == 1 が解釈された後に $seen{$_} に1が足される。
ちなみに ++ $seen{$_} == 1 は uniq と同じ挙動になる。)
15:nobodyさん
08/03/14 20:49:41
>>13
有難う御座います
BLOCK部の$seen{$_}の動きが解りました
grepとmapですね、精進しますorz
どうもperlの配列マジックが苦手で…
>>14
詳細な解説有難う御座います!
BLOCK部の動作が解って来ました
今迄一行スクリプト見ても"凄い"で終っていましたが、
何が起きているか理解できる様にしたいと思います
16:nobodyさん
08/03/15 01:02:29 bB5F1BkL
>>13
# アンカー表示
if($FORM{'comment'} =~/>>(\d{1,4})/){
$no = $1
$DATA[$no] = $ENV{'SCRIPT_NAME'}?no=$no
print "<a href=\"htURLリンク(url&no=$no\)">>>$no</a>";
といった感じでやってみたのですがうまくできません・・・
間違いだらけだと思いますが、何かとご指摘よろしくお願いします。
17:nobodyさん
08/03/15 01:23:16
>>16
スクリプト自体に「no=123 を受け取ったら No.123 の記事だけを吐く」みたいな
機能が存在しないまま、アンカーのことばかり気にしてたりしないか。
18:nobodyさん
08/03/15 03:38:52
LWPやXMLといったモジュールをフリー鯖で使用するにはどうすれば
19:nobodyさん
08/03/15 12:35:24 q6rOizZS
>>18
pure perlなモジュールなら、自前の鯖にインスコされてる.pmファイルをうpすれば桶じゃね?
20:nobodyさん
08/03/17 06:27:56
LWPって標準モジュールでなかったっけ?
XMLはモノによるけど有名どころはXPAT?必要だからインストール無しだと厳しい
21:nobodyさん
08/03/20 15:51:16 +FD61Aq0
>>17
具体的にどのようにしたら良いのでしょうか?
22:nobodyさん
08/03/24 12:00:22 /JLxXrtH
どこで質問してよいのかわからなかったのですが、
使うプログラムがPerlなので、こちらでさせて頂きます。
ウィンサーバーで、お問い合わせフォームを使おうと思っています。
URLリンク(www.winserver.ne.jp)
使うお問い合わせフォームは、「フォームメール」です。
URLリンク(www.rescue.ne.jp)
以下のFAQをみると、「次のコードを記述下さい」とコードが
書いてありますが、どこに入れればよいのかわかりません。
URLリンク(www.winserver.ne.jp)
webform.cgiに入れればよいのかと確認しても、
「サポート外だから教えられない」と言われてしまいます。
webform.cgiに入れて試してみても、
「CGI Error
The specified CGI application misbehaved
by not returning a complete set of HTTP headers.」
と出てしまいます。
どうしたらよいのか、ご助力頂ければ幸いです。
23:nobodyさん
08/03/24 14:22:47
エラーメッセージ見てまず何が原因かと思った?
そっから考えろ
24:nobodyさん
08/03/24 15:00:22
そのコードは記述する必要がないんじゃないか?
25:22
08/03/24 15:26:00
>>23,24
CGI/Perlについては、設置程度はできるのですが、
それ以上はわからないのです・・・。
ウィンサーバーはパーミッションの設定はできないし、
>print "Content-type: text/html\n\n";
とあるので、とりあえずwebform.cgiの中で、
「Content-type」ああるところを上記の物に変更しても、
同じメッセージがでるしで・・・。
行き詰まっています。
26:nobodyさん
08/03/24 15:35:26
webform.cgi の中の受信先メールアドレスを自分のアドレスに書き換えて設置するだけでは?
27:nobodyさん
08/03/24 15:58:36
basp21 使えってサーバみたいだから sendmail(互換) 前提のスクリプトが
動くようにするのは「設置程度なら」の人にはきついと思う。
28:nobodyさん
08/03/24 16:35:00
>>22
もう諦めて、無料のレンタルフォーム使ったら?fc2とかの
29:nobodyさん
08/03/26 21:12:26
Talk2chを参考にしてSOCKETを使い、スレのDATを取得したんですが、
取得したものを変数に格納する方法が分かりません
print SOCKET "GET /PC11.2ch.net/dat/10000000.dat HTTP/1.0\r\n";
↑こんな感じです
30:24
08/03/26 21:14:23 YxQEkSzy
ID忘れてました
スイマセン
31:29
08/03/26 21:15:27 YxQEkSzy
29でしたorz
32:nobodyさん
08/03/26 21:27:35
既視感が。
>>29
スレリンク(tech板:737番) (738が俺)
向こうで続けてもいいと思うんだけど。
33:nobodyさん
08/03/27 06:27:10 17ssUCBE
>>32
低レベルすぎると思って
34:nobodyさん
08/04/03 16:38:03 n0FZOeJi
会社で、サブルーチンの中でグローバル変数?($_とか)を
使わんほうがいいということで、
print &gokei('山田<>1','菊池<>2','田中<>3');
sub gokei{
local @lines = @_; local $gokei =0;
foreach(@lines){
my ($name,$pt) = split(/<>/,$_);#もしくはsplit(/<>/);
$gokei += $pt;
}
return $gokei;
}
ってやってたのを軒並み
foreach my $line(@lines){
〜 = split(/<>/,$line);
〜;
}
に変更されちゃったんですが、そういうものなんですか?
なんかいろんなところで不便なんですが…。
35:nobodyさん
08/04/03 16:51:17
プログラムの流れとか関係ない処理とかなら$_使ってもいいと思うけどなぁ
省略したほうが読みやすいときも個人的にいっぱいあるし
他のPerlをあまり使わない人のためじゃない?
あと、my変数と違ってlocal変数は本当はグローバル変数だよ
36:34
08/04/03 17:34:30
返事ありがとうございます。
$_が出てくるときは長々と複数行引きずる事はないですから、
害はないとは思うんですが・・・。
あと、上記ならまだいいんですが、
$yamadacount = grep((split(/<>/,$_))[0] eq '山田',@lines);
みたいな使い方してる場合はもうどうした物やら…
37:nobodyさん
08/04/03 17:34:52
>>34
それよりも local @lines =@_ , (略) のが変。
$pt もグローバルだし。
perl4 時代のプログラム書くなよ。
まあ、$_ に関しては 35氏と同意見だけど、コーディング規約なら仕方ない部分はある。
(が、上記の理由により、貴社のコーディング規約が時代に則ったものとは判断しがたい。)
真相は、スパゲティをみかねた上司が手を入れちゃったって所じゃねえの?
38:nobodyさん
08/04/03 19:35:33
失礼、$pt はグローバルじゃなかった、orz...
あと、()の行は「(が、仮に規約があったとしても、…」って書いたつもりだった。
>>36
$yamadacount
= grep{
my $line = $_ ;
( my $name, undef ) = split /<>/, $line ;
$name eq '山田' } @lines ;
後、それを $_ を用いて書くなら(エンコーディングの話しは抜きにして)
$yamadacount = grep /^山田<>/, @lines ;
なりなんなりもっとすっきりしたコードが書けるんじゃね?
39:nobodyさん
08/04/03 20:07:16
名前も付けなくていいし。
40:nobodyさん
08/04/03 20:17:54
foreachループの制御変数( デフォルトで$_ )は使った後もとの状態に戻されるよ
41:34
08/04/04 10:01:42
いろいろ返事ありがとうございます。
さきほど以下のような形でまわしてみたところ、
@aaa = ('a','b','c');@bbb = ('A','B','C');
$_ = "HELLO";
foreach(@aaa){
foreach(@bbb){
print;
}
print;
}
print;
結果は'ABCDaABCDbABCDcABCDdHELLO'となりました。
ということはやっぱり>>40さんの言うとおり少なくとも
foreachで用いる$_は別段問題ないって事ですよねえ。
$_に直接何か入れる事なんてあんまりないですし。
もうちょっといろいろ試して勉強してみます。。
42:nobodyさん
08/04/04 12:31:56
2種類のファイル(それぞれ複数あります)から必要部分を抽出して
リンク付きリスト作成したいのですがよろしくお願いします
perlで使う命令の意味もわからないレベルです(できれば丸投げ希望です)
1種目:htmlから抽出したい箇所
・<title>文字列</title> #1行構成
・<title xml:lang="ja" lang="ja">
文字列</title> #2行構成
・【住所】文字列 #1行の時と備考があって2行で構成されているファイルがある
・【TEL】半角数字で電話番号-ハイフン付き(03-3333-XXXX)10桁構成もしくは携帯(090-1234-XXXX)11桁構成
2種目:TXTから抽出したい箇所
<アピール>文字列<アピール>
約200文字〜300文字が改行無しに記載されている場合と
改行ありで2行から構成されている場合があります
★抽出したファイル名の一覧は<a href c:\test\list\ファイル名 </a>でリンク付き一覧
一覧表の構成(ソートは<title>の昇順)一覧表は.htmlで保存したいです
・<title>(htmlから抽出)
・【住所】(htmlから抽出)
・【TEL】(htmlから抽出)
・リンク付きでファイルネーム(htmlから抽出)
・<アピール>(TXTから抽出)
・リンク付きでファイルネーム(TXTから抽出)
それぞれの種類で複数あるファイルから上記部分を抽出して1枚の一覧表作成が目標です
どなたかよろしくお願い致します
43:nobodyさん
08/04/04 12:58:40
丸投げスレ池
44:nobodyさん
08/04/04 20:30:27
>>42です
>>43さん丸投げスレってあるのですか
私にピッタシのスレだ^^;
探してみるねお邪魔しましたノシ
45:nobodyさん
08/04/05 13:15:12
こんにちは>>42です
丸投げスレを探したのですが既にあるスクリプトを改造するスレでした
私は改造とはちょっと違うのでこちらで勉強させてくださいお願いします
2枚のファイルから1枚にするより1枚の2箇所からのほうがいいかと思い結合させました
質問内容が>>42から変更します申し訳ないです
1枚のhtmlから異なる箇所にある複数行を読み込んで別ファイルを作る方法を教えて下さい
-------------------------------------
<h1>今日も晴れハレ^^</h1>
<h2>お友達を募集する</h2>
<h3>はじめまして<br>
元気だけがとりえの私です<br>
よろしくね</h3>
<h4>今日のラッキーカラーは黄色</h4>
-------------------------------------
<h1>〜</h1>と<h3>〜</h3>(複数行にまたがってる)の2箇所を読み込んで
読み込んだ部分だけ別のファイルに書き込んで保存したい(ファイルは新規作成)
部分的にでもアドバイスお願いできないでしょうか?
特に<h1>〜</h1>を読み込んだ後、離れた箇所にある<h3>〜</h3>の複数行を読み込ませる部分お願いしたいです
どなたかよろしくお願いします
46:nobodyさん
08/04/05 13:22:57
>>45
while (<>){
next if !( /<h1>/i .. /<\/h3>/i ) ;
print ;
}
h3 が二箇所あるとかだったら知らん
47:nobodyさん
08/04/05 13:31:19
ああ、思いっきし間違えた。
h1 と h3 だけ抽出したいのね。
while(<>){
next if !( /<h[13]>/i .. /<\/h[13]>/i ) ;
print ;
}
こっちだわ
48:nobodyさん
08/04/05 14:40:16
>>45
ついでに
use strict;
my $joined = join "", <>;
my @matches = $joined =~ m{(<h[13]>.*?</h[13]>)}isg;
print map "$_\n", @matches;
でなったけど
リャマ本から省略して書くと
htmlみたいなマークアップ言語には多くの落とし穴があるから単純なパターンは使わずそれ用のモジュールを入手したほうがいいらしい。
49:nobodyさん
08/04/05 15:04:15
>>46->>48
お忙しい中、レスありがとうです
>>45です
もしタグ名が違う場合はどう書けばよいでしょうか?
例にあげた文ではサーチする文字列のkeyは2箇所とも<h>ですが
<h>と<span>の2種類の場合はどうすればいいですか
丸投げですねすいません恐縮です
>>48のそれ用のモジュールってあるんですか
もしよろしければこちらも教えて下さい
何度もお手数をお掛けして申し訳ないです
50:nobodyさん
08/04/05 16:02:34
>>49
use strict;
my $joined = join "", <>;
my @matches = $joined =~ m{(<h\d>.*?</h\d>|<span>.*?</span>)}isg;
print map "$_\n", @matches;
モジュールは探したけどわからんかった。すまん
それと、書いといて難なんだが勉強不足で>>47さんのコードがよく分からないけど
こっちのコードだと、でかいファイルを処理するときにjoinで全部繋げてからやってるから
たぶん、>>47さんのコードより表示するのが遅くなる
キーボード打つ回数も多くなるし
51:nobodyさん
08/04/05 16:21:20
お世話になります>>45です
早速教えていただいたことを取り入れようとしてみたのですが
上手くいきませんでした
2種類あるタグは変数も2つに分けたほうがいいのでしょうか?
格納の仕方を教えて下さい
my $fileに<h1>〜</h1>を格納
my $file2に<span>〜</span>(複数行にわたる)を格納
2つの変数が格納された後
$file と $file2 の2つの変数をmy @files取り入れるのはどうすればいいですか
ハッシュは%linksとしたいです
書き込む時の事も2つになればどうすればいいのか?よくわかっていません
foreach my $file (sort keys %links) { print FH qq|\t<li><a href="$file">$links{$file}</a></li>\n| }
foreach my $file2 (sort keys %links) { print FH qq|\t<li>$file2</li>\n| }
でいいのか変数格納できていないので確かめていないです
どなたかよろしくお願い致します
52:nobodyさん
08/04/05 16:24:30
>>50さん
>>45です
私が書き込む寸前にレスしてくれたんですね
入れ違いになってしまい申し訳ないです
(ソースを見ながら書くと遅くなってしまいました)
>>50さんに教えていただいたようにパイプを使ってやる方法を模索してみます
ありがとうございます
53:nobodyさん
08/04/05 16:33:54
>>52
パイプは使ってないよ
m{(<h\d>.*?</h\d>|<span>.*?</span>)}isg
の縦棒(|)は右側か左側どっちかにマッチするようにしてるだけ
それと、このコードは
<span><span></span></span>とか入れ子になってると<span><span></span>にマッチしちゃう
正規表現の部分のコードのはてな(?)を取り除くと<span>aaa</span>……<span>bbb</span>のようになってるとき<span>aaa</span>……<span>bbb</span>にマッチしちゃう
だから、やっぱり書いておいて難なんだけどこのコードはおすすめできない
54:nobodyさん
08/04/05 16:37:59
>>50さん
>>45です
my @files = glob("$dir*.html");
globでファイル名を配列として
そのあと
foreach my $file (@files) {
としてファイルを1つづつ読んでいます
ファイルの中が1箇所の時は大丈夫だったんですが
2箇所になると難しくなって困っています(例で言うと<h1>の部分と<span>の部分です)
アドバイス頂ければ嬉しいです
よろしくお願い致します
何度もすいません
55:nobodyさん
08/04/05 16:42:14
>>50
モジュールは (HT|X)ML::Parser とか。
正規表現だけではネストに出くわしたときに「落とし穴」にはまる、と。
そのコード書ける人が>>47さんのが把握できないってのが腑に落ちんのだけど
どこが謎なの?
>>45
スレリンク(php板:277番) かつ
スレリンク(hp板:50番) な者ですが。
↑こんなやっつけ仕事を使い回そうとせずに「きちんと丸投げ」してくださいな。
自分より腕のいい人はたくさんいるから、暇つぶしで相手してくれるかもしれないし。
でも正直、あなたは丸投げ && 仕変連発を平気でなさるので業者に依頼して欲しい。
56:nobodyさん
08/04/05 16:46:38
>>53さん
詳しくありがとうございます
>>45です
右か左かを選ぶって意味ですね
そうすると最長一致って事で<h1>の下にある<span>ばかりを選ぶことになりますね
どうすればいいのか・・・
ちょっと頭冷やして再考してみます
ありがとうございました
お返事頂けてよかったです
57:nobodyさん
08/04/05 17:10:33
>>55さん
お世話になります
コーディング初心者スレで場所が違うと指摘を受けて自分が質問させてもらえるところを捜していたので
あなたとお会いできるとは思わなかったです
書いてくれた人にもう一度聞きたかったんだけど
みんなに迷惑だと言っていたのであなたに聞けなかったんですよ
また教えていただけないでしょうか?
お願いします
先のレスで書いたように別々のところ2箇所から取り出さなければいけない事がわかりました
以前お話したようにファイルリストを作りたいのですが
タイトルの下にもう1行ありました
タイトルにファイル名のリンクその下に1行書かなければいけなかったんです
もしよろしければお時間のある時にでもまた教えて下さい
お願い致します
58:nobodyさん
08/04/05 17:13:24
>>55
なるほど。ありがとうございます
「/<h[13]>/i .. /<\/h[13]>/i」の部分が分かりません
$_に対してマッチしようとして真か偽を返すというのは分かるんですが範囲指定演算子がどういう役割をしてるか分からないです
>>56
何もできずにすまん
やっぱり>>55さんが紹介してくれたようなモジュールを使ったほうがいいよ
59:nobodyさん
08/04/05 17:46:59
>>57
うーん、仕変が激しすぎるので…仕事だったら請けてるんでしょうけど。
とりあえず
スレリンク(php板:278番)
という声もあったので、ちと考えてみます。
>>58
そこの .. でしたか。
説明しようとするとウソを書きそうなので
perldoc perlop や
URLリンク(perldoc.jp)
の説明やサンプルを眺めてみてください。
60:nobodyさん
08/04/05 18:14:08
>>59
すみません、perldocに目を通すのを忘れていました
コンテキストで役割が違うんですね
勉強になりました
本当にありがとうございました
61:nobodyさん
08/04/06 14:25:12
こんにちは>>57です
>>59さんレスありがとうございます
わかりました
この先どんな問題が出てくるのか予想も出来ないので取り合えず自分でできるように頑張ってみます
2chで聞く時に「質問者は環境とやりたいことを出来るだけ詳しく」ということなので
やりたいことを詳しく書く、そしたら解答してくれる前に新しい問題点を発見して「質問内容を変更します」って繰り返してしまいました
解答してくれる方にはご迷惑をお掛けして反省しています
perlを始めて1週間、変数について勉強しているとこです
スカラ変数を2個にして配列変数0、1とすればいいのかなって思いました
それで正解なのかはわかりませんが取り合えずタイトル以外にもう1個スカラ変数を増やして読み書きできる事を目指してみます
ありがとうございました
62:nobodyさん
08/04/06 22:29:28 nA18XPcw
perlの正規表現マッチングで、
htmlを読み込んだ$contentsから
<li>〜<li>の〜部分を抜き出したいと考えがえています。
for( my $i=1; $i <= 20; $i++){
if( $contents =~ m,^<li>(.*)</li>(.*),g ){
$block = $1;
$contents = $2;
}
}
この場合、i=1の時、
最後<li>のマッチングにかかる部分しか摘出できず、
うまい正規表現がないかと色々調べては回ったのですが、
ハマってしまいました。
$contensの初めからマッチングするようなコードを
ご教授お願いします。
63:47
08/04/07 07:06:59
誰向けでもなく一応のフォロー。
my $cnt = 0 ;
while(<>){
print $cnt . q{ } . $_ if $cnt != 0 or m{<span>}i ;
$cnt += m{<span>}ig ;
$cnt -= m{</span>}ig ;
}
>>62
my @res = $contents =~ m{<li>(.*?)</li>}gs ;
64:nobodyさん
08/04/07 14:14:44
>>47さん
せっかく教えてくれたんだけど
今の私には理解できていないんだ(;´д⊂ヽ
後に参考になるかもしれないのでメモして大切に保存しておくよ
活用できなくて申し訳ない
ほんとにありがと
65:nobodyさん
08/04/07 19:50:52
動画ファイル(youtube.flv)のハッシュ(SHA-1)を求める方法を教えてください。
66:65
08/04/07 20:57:10
あれからずっとググってやっと見つけました。
ありがとうございました。
67:nobodyさん
08/04/08 00:48:13
perl/cgi逆引き大全600って本を1ページ目から読んでるんだけど
スカラと配列とハッシュがよくわかんない
スカラは値$
配列@は複数のスカラ値$
@があればスカラ変数$はいらないのでは?
@が複数のスカラ値と記載してあるんだけど
@へ複数の変数を入力する方法は記載されていないここが知りたいのに見当たらないね
最終的にソートする予定があればキーと値%のハュシュにしておいた方がいいのかな?
ソーと機能の所読んだらキーでソートするって書いてある
ハッシュをいくつも作って複数のハッシュを並べ替えてから書き込み
ってのが最終目標にすればいいのかな
39ページ目にして出てきたqwとはなんだろか??
目次にもTips検索にもない
ネットで調べたら
qw
シングルクォートで囲んだ文字列をスペースで split するのと同様です
命令を命令で説明しているところばかりだsplitってわかんない
splitを調べたsplitを使ってデータを分割と記載されている
・・・
qwはデータを分割するための命令なのか??
なんで日本語で解説しないんだ
先日もわかんない単語があった
ネットで調べたストリングと一緒と説明されていた
ストリング??ギターの弦か??ワケワカメ
68:nobodyさん
08/04/08 05:45:29
Perlの前に日本語から勉強しなおせ
69:nobodyさん
08/04/08 06:18:13
お前もな
70:nobodyさん
08/04/08 06:31:50
ここが一番わかりやすかった
perlのアレコレ
URLリンク(furyo.on-air.ne.jp)
私は10日ほど前からperlに興味を持ちお勉強してたんだよね
perl解説本3冊
ググルこと100サイト
初心者用ばかり選んでいるのにわかりにくいね
「簡単」「入門」「初級」で探してみるんだけど
中身は自分の思い出すためのメモ帳だね
全然わかんない
命令の説明に命令使って「入門」はないだろw
一般社会なら後進指導の立場には向いていないね
命令を説明するのに「○○はこんな感じです」と
その下にサンプル書いているだけではわかんね
私が選んだサイトは文脈からして10年くらいは経っているのではないかと思うがわかりやすいね
ヘンテコな広告も一切なくて集中して見れたな
「perlのアレコレ」管理人さんここを見ることはないかもしれないけど
ありがとう。
71:nobodyさん
08/04/08 07:04:21
>>70
…そこもたいして他と変らんよ。多分、覚えたての頃に書いたんだろ。
ヘタに丁寧に書いてある分不味い。
# 範囲演算子の第二の用法(このスレの46)なんかは、まあ省くのは
# しかたないとして。
初心者向けと言うのを加味しても、for の項の例文の無意味な代入とか、
\w の説明とか、
if($target =~ /my main editor is (\w+)/)
{
print "bad!\n" if $1 =~ /emacs/i;
print "good!\n" if $1 =~ /vi/i;
}
こんな例文とか。ちょっと眺めただけでも突っ込み所がある。
72:nobodyさん
08/04/08 23:43:12
$+ の意味はなんですか?
$# は探してたんでやっとわかった。最後の変数ね
大全600ダメだ
ゴミ買って来た様なもんだな使えねえ
他の解説書に気になるサンプルがあった
よく読んでもサンプルに出てくる$+の意味は解説されていない
仕方ないので意味を調べて廻る
くだらない時間が過ぎていく・・・
意味わかんないので他の解説書で調べたり
ググって調べたり無駄な時間ばっかりだ
それで答えは出てこない
どうなってんだ?
hello、perl以外作ったことないよ
グーグルで$+ と$# と半角でぐぐったら1件もヒットしない
なぜなんだろか??
怪しい命令なのかね
73:nobodyさん
08/04/08 23:57:18
>>72
URLリンク(www.google.com)
74:nobodyさん
08/04/09 00:44:21
>>73
ありがと
ラストプレーンマッチ
最後にマッチする括弧がどれかわからない場合に使うと便利
まさにこれですよ^^
ありがとう
while (<FH>) { $links{$title} = $1 and last if (m!<title>(.+?)</title>!) }
これの m! の部分はマルチオプションっていうのかな
後ろに!が付いているので複数行はダメという意味でよい?
これを複数行対応にしたいのでシングルモードに!にしてみると
while (<FH>) { $links{$title2} = $1 and last if (s!<title>(.+?)\n(.+?)</title>!) }
デバッグでエラーになるんだよね
複数行対応にするにはどうしたらいいですか?
ここが$+の使いどころかな?
わかんない・・・
75: ◆EtAiUEg7/Q
08/04/09 01:15:30
あぼーん用に捨てトリ。>>55です。
>>74
だからそのコードは使い回さずに書き直してくださいと(ry
m! … スラッシュのエスケープが面倒だった。 / 以外の記号でパターンを囲むとき用。
後ろの ! … m! で始めたんだから終わりも同じ記号。
複数行 … スレリンク(tech板:638番)+642 で教えました。
ついでに言うと
スレリンク(tech板:673番)
も私です。「gawkで片づいたら、くだすれPerlのアレは全部無駄ですか」という気持ちがあのレス。
ご自分でお書きのとおり「残念」です。
あと、ここもム板の正規表現スレも自分の日記を書くとこじゃありません。
76: ◆EtAiUEg7/Q
08/04/09 01:55:27
忘れてた。
while (<FH>) { # 1行ずつ読み込んでループする。$_ に入ってるのは1行だけ }
77:nobodyさん
08/04/09 02:43:19
>>75さん
こんばんわお世話になります^^
正規表現の「残念でした」は先の言葉が「次はなんだろう」だったので
クイズのノリなのかと思って
perl→gawkは正解じゃないので「残念でした♪またどーぞ♪」のノリでお答えしたのですが
言葉は難しいですね
ご心配無用ですよ
私がやりたい事を理解できればスグ消えます
ただ思ったよりかなり時間はかかっていますが
パソコンには関係のない商売なのでこればっかり調べたり勉強してとかは実際無理なので。
例の教えて頂いたコードを参考にさせて頂いているのですが
コードって元コードを理解しないと書けないですね^^;
あのコードで特にわからないの所は2箇所あります
1箇所目は複数行
2箇所目は下から3行目のループ
1行で$fileを3回使っていますよね
2回目$fileはファイル名だとわかるのですがlist_fileの宣言をすれば自動的に省略して$fileでOK??
1回目はmyが初めについているのでこの行で宣言してるってことなのだろうか?
3回目はlinksになっている何故$file(同じ文字なのに)動作は違うのかがよくわかりません
タイトルの下にデータ行と備考項目と増やしたいのですが何故か最初の5バイトが無くなるんです
まあ気長にやってみますよ
オヤシミ^^
78: ◆EtAiUEg7/Q
08/04/09 03:07:32
>>77
# 「こんぴーたに無関係な商売なので、用事が済めばあんたらにもプログラミングにも用はない」と
# 言ってることに気づいてるのかなあ。
・複数行のこと。
ループ書き直すのが面倒な心境なので略。
・foreach my $file (sort keys %links) { print FH qq|\t<li><a href="$file">$links{$file}</a></li>\n| } のこと。
foreach (sort keys %links) { print FH qq|\t<li><a href="$_">$links{$_}</a></li>\n| }
# 動作は同じ。
79:nobodyさん
08/04/09 03:29:44
>>78
よくわかんないけど
可哀相な人だ
ヘンテコなとらえ方してるね
あなたには感謝しているけど
仕事を放ったらかしでは生きていけませんという意味なのだが・・・
とにかくありがとう
>>78に記載してくれたコードも猫に小判
私には理解できていない
自力でなんとか頑張ってみるよ
あなたはとてもお人好しでいい人だ
知識もある
短気なところ直せば世界が変わると思うよ
オヤシミ^^
80:nobodyさん
08/04/09 10:21:11
>>74
m//
URLリンク(perldoc.perl.org)
複数行対応
URLリンク(perldoc.perl.org)
81:nobodyさん
08/04/09 11:43:17
>>◆EtAiUEg7/Q
アンタ良い人だよ、おつかれさんw
82:nobodyさん
08/04/09 16:26:01
>>80
ありがと
$str =~ s/<aaa.*?>(.+?)<aaa>/$1/s;
これまだ活用できていないんよ^^;
検索するところに("$str")や("$1")とかしてみるんだけど結果が出ない
んで書き込みのところも同じようにしてみた・・・結果は出ない
命令の前にmyを付けてmy $str =~ s/<aaa.*?>(.+?)<aaa>/$1/s;とかやってみたけど同じだ
この複数行対応はまだまだ先の課題のようだorz
%linksこれって特別な命令ですか?
どうもこれがわかっていないと検索文字がおかしくなるみたい
(m!<title>(.+?)</title>!)これの場合対応したファイルは狙い通りに処理が終わる
(m!<title(.+?)/title>!)こうすると >タイトル< という感じで両端に><がひとつづつくっついている
他の<で始まる文字列を検索してみた
自分で適当に作った<aaa>とかは思い通りに処理してるけど
<objct>をターゲットにしてみた<object(.+?)object>
なぜか先頭部分と後部は消えている
%linksを%teslinkstesという変数名に変えてみた
構文チェックはエラーなし。しかし起動しなかった^^;
%linksを調べてみた
相変わらず全集600には当然のように記載されていない
ネットだけが頼りか・・・
リンク集ばかりヒットする
ググル文字を変えて「perl 命令」「perl 索引」「perl 逆引」
期待できそうなサイトはあったけど%linksは見当たらない
みんなどこで覚えてるんだろうか学校行ってたのかな?
サンプルを参考にさせて貰う以前の問題だな
%linksは明らかに特別な変数のような希ガス
83:nobodyさん
08/04/09 16:33:39
「perl 特殊変数」でぐぐるといい
もしくは
perldoc Perlvar
特殊変数以外は自分で定義してるはず。
84:nobodyさん
08/04/09 17:22:09
>>82
せめて>>70のリンク先(決して推薦はせんが、ま、しかたない)の全部を
「実践」- 読むだけじゃなく実際に実行してみること - してから
質問してくれんか?
答える気にもならんよ。レスしても「理解出来ない」で終りだし。
◆EtAiUEg7/Q はよくもまあこんなのに色んなスレで付き合ったもんだ。
85:nobodyさん
08/04/09 17:51:57
>>83さん
>特殊変数以外は自分で定義してるはず。
これのようだ
ありがと
>>84
スレタイ嫁としかいいようないな
質問もアドバイスもしないあなたは何者?
どっか逝けばいいよ
86:nobodyさん
08/04/10 13:21:24
超初心者用ってもPerlのって事だろ
日本語の初心者やそれ以下のヒトとしての初心者はどうかと思うがな
87:nobodyさん
08/04/10 16:30:12
なんか思い込み激しいね
こんなの呼ばわりやそれ以下呼ばわりするほうが
よっぽど人として恥ずかしいので覚えておくといいよ
perl書けたから何?エライの?勘違いもイイトコだ実社会ではね
私はperlに関係あることを書き込みに来ているわけで
単語もわからないので超初心者だと自覚してるよ
まぁそういうのここでは関係ないでしょ
子供の言い合いみたいなのに付き合ってられないので
以降その手の話題は私にはしないで結構ですレスもしないです
今のところ解答者は2名のようだが居なくなるかもしれないし
気まぐれな方が通るかもわかんない
気長に待ってみてもレスもなく、このスレ消滅ってって事でも
それはそれで仕方ない私がどうこう出来ることでもない
煽るだけのレスよりかはいいと思う
今日のわからないこと。
取得タイトル部分は <a href でファイル名にリンクが張られている
後にprintした結果のタイトルには<title>のタグは付いていない
その部分を真似て他の部分を取得しようと試してみた
文字列だけがprintされているタグは前後ともに切れている
わからなかい例の1行で3回fileを使っている部分が味噌だな
その部分のスグ下で print FH qq|"$file"\n|; を記載してみた
何も取得しない・・・$fileを他の形式にしても同じようだ
謎の1行はその1行で3個の$fileを育成しているのか??
文字列の取得だけの場合は応用が利くって事がわかった
タグ付きの部分の取得はまた別にしたほうが良さげ
perlでタグ付き文字列取得の謎ってことで今日はおいておこ^^
88:nobodyさん
08/04/10 16:57:06
質問にはわかる範囲で答えてあげたいけど、マナーや礼儀も必要。
質問は簡潔に。
煽りはスルーで。
回答には感謝を。
おっぱいうp。
89:nobodyさん
08/04/10 17:04:46
せっかく和みレスが入った所悪いが、、、
>>87
俺は47=71=84≠86。
全く進歩しない奴にレスしてもつまらん。
お前が(無いと思うが)俺を回答者としてカウントしてるなら外してくれ。
「超初心者」と自覚してるならば、誘導URLを見て、変数、配列、ハッシュ
辺りの基本用語を頭に入れるくらいの礼儀は心得ろ。
# 正規表現スレにお前が表われて7日。全く進歩してないんだもん。
# 教えて君にも程がある。
煽ってくれても構わんが、その煽りの文章を考える暇があったら(中級以上の
リファレンスを買うんではなく)初心者本でも素直に買って読めよ。
空気悪くしてすまん、他の人。しばらくレスは自粛します。
90:nobodyさん
08/04/10 17:07:35
マナーや礼儀ってあなたが決めてるの?
「マナーたるものこういうものである」
「礼儀とは云々・・・」思い込み激しいと疎外しちゃうよ
なんか勘違いしてるね
ペコペコしろという上から目線
キンモ〜〜としか言いようないなw
91:nobodyさん
08/04/10 17:23:04
>>90
俺、>>81=>>83=>>88
質問者=初心者ではないし、回答者=エライわけでもない。
わからないことは質問する、わかることは答える。
ただ、教えを請う立場なら礼儀は必要だと思う。
でも勘違いしてるならしょうがない、以後回答は控えます。
92:nobodyさん
08/04/10 17:30:12
>>91
あ、そうなんだ
お世話になったねありがと
お疲れちゃん
93:nobodyさん
08/04/10 17:54:14
情報が只でもらえると勘違いしてる質問者か。
俺も抜ける。まぁ、頑張れ。
94:nobodyさん
08/04/10 17:57:34
>>93
こんなとこで客を探してる暇な業者さんなのだろか?
さよなら
公然の場所で恥ずかしげもない
その発言が面白すぎて
釣られたー
95:nobodyさん
08/04/10 18:09:05
久々に香ばしいのが沸いたなあ
ま、一所懸命煽ってがんばってくれ
俺も抜けるよー
96:nobodyさん
08/04/10 18:15:14
>>95
ていうかさっきからここで発言してるの
あなたと私だけじゃないでしょうか?
まぁ解答しないよってのはよくわかったのだが
それで何?くらいにしか思わないのだがw
ま、さよなら
お元気で^^
97: ◆EtAiUEg7/Q
08/04/10 18:30:14
>>85
スレタイの「超初心者」ってのは…
--
use strict;
my %doubutsu; # どうぶつハッシュ
# $doubutsu{'いぬ'} = 'ポチ';
# $doubutsu{'ねこ'} = 'タマ';
# はじめはこうしてたのですが、種類を増やしやすいように工夫してみました。
my @kumiawase = ('いぬ','ポチ','ねこ','タマ','へび','ガララ');
for (my $i = 0; $i < $#kumiawase; $i++) {
$doubutsu{$kumiawase[$i]} = $kumiawase[$i+1];
}
foreach (keys %doubutsu) {
# 「うちの タマ の名前は へび です。」という大惨事が!ヒントください!
print "うちの $_ の名前は $doubutsu{$_} です。\n";
}
--
…こういう「プログラミングを身につけるのが目的」の超初心者さんのこと。
「そりゃそうなる。$i++ を $i+=2 に変えてみ。つーか、ガララかよw」とか
「("いぬ\tポチ",...) 形式にして foreach と split(/\t/) 使ったらどう?」とか
気のいい回答者さんたちが相手してくれる。
結果だけが目当てなのに業者依頼もせず、気長に取り組むつもりも全くなく、
先を急ぎまくって質問を次々に投げる人は、初心者でも何でもありません。
> 仕事を放ったらかしでは生きていけません
そうですよ。
あなたのような方から「要求定義262,500円 + 制作3,150円 = 計265,650円」をいただく立場の人たちが
仕事をほったらかしてタダでできるのは、冒頭のような初心者さんのお手伝いぐらいです。
98: ◆EtAiUEg7/Q
08/04/10 18:30:49
>>89
今更ですが range operator の誰向けでもないフォロー、ありがとうございます。
説明しようとして「左項が真になるとスイッチが入り…えーと…perldoc」でしたので。
「よくもまあ」ではあるんですが、仕事もヒマな時期でしたし
・いつも見てるスレに何かが来る
・自分が回答
・「理解できない。でもありがとう」と言って(一旦)去る
…これで他の方の被害が少しは減るのなら、と。
ソフ板辺りも壮大なことになってそうですが、あちらは見てないので関わってません。
教えてちゃんですらないんですよね。
結果が欲しい、手法には興味がない(と書くと「違う」と返されるだろうけど)、と。
そんなわけだから処理系自体がコロコロ変わったりもするわさ、と。
腰を据えて初心者本でお勉強という方向へは行かない人なのでしょう。
本当は自分もこんな話は書きたくないんですが、誰かが書かないと日記が延々と続くんだなあ
と思ったので、NG用に捨てトリつけた次第です。
>>96
短気を起こしていろんな人を煽っても、いいことないですよ。
そういえば、私の短気なとこを直せば世界が変わると教えてくれた人がいました。
(レス|回答)自粛の方が続出、と。まあ、仕方ないというか自然な流れでしょうな。
捨てトリももう要らなくなって、ここは素敵な日記スレに移行かな。
99:nobodyさん
08/04/10 18:31:42
>>96はKY
100:nobodyさん
08/04/10 18:35:01
まーくだすれだしアリっちゃアリ。
101: ◆EtAiUEg7/Q
08/04/10 18:37:23
>>99 =~ s/96/97/; # 勝手に直しとく
102:nobodyさん
08/04/10 18:44:02
>>97
おぉやっぱりあなたか
あなたが顔を真っ赤かにしながらレスしている姿は笑えないよ
(まぁ吹いちゃってしまったのだがwww)
なんか難しい説明されてもよくわからない
くだすれ = くだらないスレ と教えてくれたのですが
しかも超初心者とまで付け足してあるw
まさに私のためのスレだと思ったよ
スレタイは業者の釣りえさだったのか
気づけよ>>自分www
そんなに必死になるほどのことでもないので
むしろどーでもいいことなんだけど
気になったからやってるだけで
質問者は回答に飢えている
この心理を突いた網だったのだ
ネットでネット(網)張ってましたねw
洒落にもならないけど実際そういう人がいてたのか・・・
必死やのー
ま、気長にやっていくのであなたは私を気遣う必要ないですよ
んじゃね
103:nobodyさん
08/04/10 18:52:33
>子供の言い合いみたいなのに付き合ってられないので
>以降その手の話題は私にはしないで結構ですレスもしないです
リャマ本からの引用
「Perlは、少なくとも毎日20分間はプログラムを書く--そしてほとんどのプログラムをPerlで書く--人向けの言語です。」
もし、毎日書くか事情があるなら>>89の引用
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
腰を長くすえるなら応用のきくやつを学べ。
アドバイスいっぱい転がってるじゃん。
あと、おまえなじられたら死ぬのか?
104:nobodyさん
08/04/10 18:54:15
|
|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
/
ぷちっ /
∩___∩ . 从 /
| ノ ヽ /
/ ● ● | (=)ヽし
| ( _●_) ミ/ ` ノ
彡、 |∪| ノ /
/ ヽノ / ノノ
/ /
/ /
ムシャ |
ムシャ |
∩___∩ | ぷらぷら
| ノ ヽ (( |
/ ● ● | J ))
. (( | ( _●_) ミ ・
彡、 |∪}=) ,ノ ∴
/ ヽ/^ヽ ヽ 。
| ヽ \ |
| ヽ__ノ
105: ◆EtAiUEg7/Q
08/04/10 18:57:11
>>102
何か、私にはわからない謎の陰謀にお気づきになった様子ですが
自分が>>78の次に書いたのは>>97ですよ。
「私=ここで客を待ち構えてる業者」ということにしたいのでしたら、どうぞご自由に。
# こんなとこで客を拾うのってめんどくさそうだなーとしか思えないけど。
106:nobodyさん
08/04/10 19:00:59
よくわからんが私の質問どっかいっちゃったのは確か棚
107:nobodyさん
08/04/10 19:01:12
久々に叩かれまくられてるのを見た
超初心者でもここまでの香具師はそうそういまい
108:nobodyさん
08/04/10 19:02:32
レスしてるのは俺ひとりなんだけどな。
109:nobodyさん
08/04/10 19:09:35
電波役になったり電波に煽られる役になったり◆EtAiUEg7/Q役になったりしながら
ひとりでスレ回すのってマジ大変。
110:nobodyさん
08/04/10 20:06:37
くだすれ = くだらないスレじゃなくて
詳しい人が見たらくだらない質問だと思ってたけどな。
>>1を読んでもそう取れる。
111:nobodyさん
08/04/10 23:57:10
>>102
おまえ、キチガイで名をはせたヨシオカヒデノリだろ。キチガイっぷりがそっくりだ。
112:nobodyさん
08/04/12 00:00:56
>>87
>>なんか思い込み激しいね
が>>87を見ても>>102を見ても自分の発言に対して書いてるようにしか思えない点について
113:nobodyさん
08/04/13 13:47:51
元気でやっとるかね^^
ちょっとわからないことがあってまた落書きしに来たのだw
解答いただけたら嬉しいけど期待できないのはわかっているので
気長に解答者さん待ってみるよ^^;
@抽出部分の検索文字を <object (.+?)object> にすると
(.+?)の部分だけが取れて
始めに出てくるはずの <object と 最後の object> が現れないんだよね
変数宣言の名前を全部変えてみたけど動くので特別な変数名は使っていないようだ
perl自体がそういう仕様なのかね??
Aそれから複数行抽出なんだけど
1行もしくは2行もしくは3行ってのはダメなのかな?
(s<title(.+?)title>|<title(.+?)\n(.+?)title>|<title(.+?)\n(.+?)\n(.+?)title>s);
Bそれからまだあるんだよね
<title>
<object>
<span>
この3箇所を抽出したいんだけど何故か最後に書いたトコだけが取れるんだ
{ と } の間に3つとも書いているんだけど
ファイルクローズして改めてファイルオープンするって手順にするべきなのだろうか?
今はソースぐちゃぐちゃでワケワカメになってきたw
全集600ダメだ
オープン オブ ダイ で ダイの部分が予約語なのか調べて見てもわかんない
他の本でdieの意味がわかる
せめて予約語は全部掲載してもらいたいもんだ
それでは@〜Bよろしく願います
また会おう^^;
シーユーあげ印w
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5283日前に更新/136 KB
担当:undef