Perlについての質問箱 ..
199:デフォルトの名無しさん
07/04/06 04:08:13
>>198
どういたしまして
200:デフォルトの名無しさん
07/04/06 08:54:56
仕事丸投げするのはいいが、藻前さんが辞めた後にメンテする人のことも
わかってやれよな。
201:デフォルトの名無しさん
07/04/06 09:31:06
括弧に量指定子使うのきめえ
202:デフォルトの名無しさん
07/04/06 10:26:07
foo,bar,bazが3文字って決まってるならこれでどうよ。
$_ = '111AAAfoofoofoobazbarZZZ222';
/AAA(?:(foo|bar|baz)(?{push(@a,substr($&,-3))}))+ZZZ/;
print join(",",@a),"\n";
203:デフォルトの名無しさん
07/04/06 11:15:13
つーか、そもそもどうしてそんなデータ構造なのかが気になる件。
204:デフォルトの名無しさん
07/04/06 11:30:16
宿題?
205:デフォルトの名無しさん
07/04/07 13:27:01
########################################
# データ内に改行が無ければ最初の二行は
# $_ = <>; で置き換え可能
########################################
chomp(@tmp = <>);
$_ = join '', @tmp;
$re = qr/foo|bar|baz/i;
s!(AAA(?:$re)+ZZZ)!push @a,$1=~/($re)/g !ge;
print join("-", @a);
これはひどい。
206:デフォルトの名無しさん
07/04/07 13:37:01
qrのオプションは i じゃなくて o だった。
207:デフォルトの名無しさん
07/04/08 15:55:23
perlでlogの基数が2の場合を求めるには何をつかうのが
ベスト??
車輪の再発明はしない方向で・・・
208:デフォルトの名無しさん
07/04/08 15:56:59
>>207
底の変換公式
209:デフォルトの名無しさん
07/04/08 16:29:00
>>208
thx
210:デフォルトの名無しさん
07/04/08 21:57:13
仕事で初めてPerl使うんだが難しいな('A`)
211:デフォルトの名無しさん
07/04/08 23:12:16
Cやってりゃ、Cのマクロ言語だと思って書いてれば当座はしのげる。
嵌りどころはあるが、「難しい」ではなく「勝手にいじるなよ!」ってな感じ。
Cの派生言語からでも同様。
「難しい」ってのは今までまっとうな言語の経験がないからじゃないかと思う。
212:デフォルトの名無しさん
07/04/08 23:59:21
つーか、Cみたいな型がキッチリしたのから移行すると、
なんとなく気持ち悪いw
213:デフォルトの名無しさん
07/04/09 00:12:22
>>212
Cの原始的な型じゃ、実際にコードを書くときたいして助けになってくれてないだろう。
目糞鼻糞だと思うんだけど。
214:デフォルトの名無しさん
07/04/09 00:21:03
俺は、あくまでもテキスト処理用と考えたらすんなり入れた。
Cだと文字列めんどくせえし、C++と比べても正規表現処理のためのコード量がぜんぜん違うからな。
215:デフォルトの名無しさん
07/04/09 00:22:52
>>213
そうでもない。例えばプロトタイプ宣言をちゃんと使っていれば
誤った引数を渡したりしたときなど、コンパイルエラーとして
コンパイルの時点で捕捉出来るし、プロトタイプ宣言自体が
関数の使い方に関する一番簡単なドキュメントになる。
216:デフォルトの名無しさん
07/04/09 00:27:16
>>214
テキストをちょろっと弄くるには便利だよね。
クラスやリスト、リファレンス等の基本的な仕組みが
adhoc過ぎて汚いし(←個人的見解)
プログラムが大きくなればなるほど型付静的言語の有り難味が増す。
Perlで小さいプログラム以上のものを書く気にはとてもなれない。
同じ動的言語でも、Pythonあたりならまだ許容量大きいかな。
217:デフォルトの名無しさん
07/04/09 00:28:33
そゆことだな。主にバイナリ扱うとなると、Cみたいなのが書きやすい。
文字列はperlみたいなのが楽だが。
218:213
07/04/09 00:40:57
>>215
ああ、そういえばそうだ。目糞鼻糞は撤回する。
219:デフォルトの名無しさん
07/04/09 00:41:27
>>217
バイナリとかバイト/文字単位の処理だとpack(), unpack()の嵐だわな。
それ考えると、文字列処理とか言っても正規表現使いやすいだけって希ガス。
エンコーディング周りもそんなに便利とは言えないし。
220:デフォルトの名無しさん
07/04/09 06:15:36
っ 適材適所
221:デフォルトの名無しさん
07/04/09 07:43:02
ある種の物事を異常に早く片付けられる、それがPerl。
222:デフォルトの名無しさん
07/04/09 19:15:26
元々perlは文字列処理用なんしょ。
しかし、たとうばHTMLのタグを外す処理を書く ってなった時、
perlなら簡単だけど、Cで書くとなると工程からして憂鬱だ…。
regexp.dll使うけど、メモリリーク等に気を遣わないとで面倒だ…。
223:デフォルトの名無しさん
07/04/09 20:53:41
やっぱ言語組み込みのが楽だよね・・・正規表現は
224:デフォルトの名無しさん
07/04/09 21:53:11
>>222
まぁCで文字列処理はちょっとな。
どうしても(C++でなく)Cを使う必要があるのなら、せめて
GCライブラリを使いたいところ。
C++なら、文字列処理は別に苦にはならないはず。
それとCで字句/構文解析ならlex/yaccを使う場合も
多いんじゃないかな。
225:デフォルトの名無しさん
07/04/10 17:49:24
この記事どうしてくれよう
URLリンク(gigazine.net)
226:デフォルトの名無しさん
07/04/10 18:03:28
>>225
マジかと思ってUserAgentをlibwwwにしてググったらほんとに検索できなかった。
一時的な効果しか無いだろうに、アホな対応するなぁ…。
これからは適当なAgentを騙れってことでOK?
227:デフォルトの名無しさん
07/04/10 18:18:39
IEのにあわせておくもんだろ
228:デフォルトの名無しさん
07/04/10 19:15:26
>>226
libwww-perlを拒絶しても、本当に悪い奴は遮断できず、
入門過程の新参者を困惑させ余計な時間をとらせるだけ。
まさに1000害あって1利なし。
229:デフォルトの名無しさん
07/04/10 19:59:13
所詮Google。
230:デフォルトの名無しさん
07/04/10 22:32:59
つまり、おまえらpython使えの意
231:デフォルトの名無しさん
07/04/10 22:39:48
その発想はなかったわ・・・
232:デフォルトの名無しさん
07/04/10 22:59:00
フォームへのスクリプト拒否してるからでしょ
233:デフォルトの名無しさん
07/04/11 00:55:09
>>232
んなもんどうでもなるやん。何の意味があるのかさっぱりわからん。
234:デフォルトの名無しさん
07/04/11 01:45:44
2,3日で元のスパムの量に戻るに1ペリカ
235:デフォルトの名無しさん
07/04/11 10:26:47
今更ながらどうもコマンドラインがよく飲み込めてないかもしれないので、
少しお尋ねします。
例えば
perl -pi.bak -e "tr/A-Z/a-z/"*.html
とか便利ですよね?
これを.plとして使いたいのですが無理なのでしょうか?
コマンドラインから打ち込むしか手がないのでしょうか?
236:デフォルトの名無しさん
07/04/11 10:40:03
>>235
perlrun(1)の-iオプションの説明のとこに例があるだろ。よく嫁。
From the shell, saying
$ perl -p -i.orig -e "s/foo/bar/; ... "
is the same as using the program:
#!/usr/bin/perl -pi.orig
s/foo/bar/;
which is equivalent to
#!/usr/bin/perl
$extension = '.orig';
LINE: while (<>) {
if ($ARGV ne $oldargv) {
(改行大杉でおこられるので以下略)
237:デフォルトの名無しさん
07/04/11 10:40:50
スレリンク(php板:593番)
スレリンク(tech板:235番)
238:デフォルトの名無しさん
07/04/11 10:49:06
>>236
アリガトウございます。
なお、質問するスレが似つかわしくないと重い他スレにも同じ内容を質問させていただきましたが
ご迷惑かけたようで申し訳ないです。
239:デフォルトの名無しさん
07/04/11 11:06:13
>>235
windowsだとどうも面倒なようなので他の手にします。お騒がせしました。
240:デフォルトの名無しさん
07/04/11 11:33:56
手軽に使えるようになればいいだけなら、適切なオプション
与えたperlをsystemかexecで起動するようなスクリプト書く
手もあるよ。
病的に効率を気にする人にはお勧めしませんけど。
241:デフォルトの名無しさん
07/04/11 21:53:06
>>239
Windowsなら.batに書けばいいんじゃね?
なんで.plにこだわるのかわからん
242:デフォルトの名無しさん
07/04/11 22:50:12
YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある?
243:デフォルトの名無しさん
07/04/11 23:15:28
んだ
244:デフォルトの名無しさん
07/04/12 01:10:07
> YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある?
馴れ合いなので、聞く必要なし
245:デフォルトの名無しさん
07/04/12 04:01:25
>>242
見事になんにもなし。
246:デフォルトの名無しさん
07/04/13 05:01:57
>>240
ありがとうございます。
>>241
いえ。こだわってないから他の手にするつもりです。
UNIX環境でないとなかなか不便なものなんですね。
247:デフォルトの名無しさん
07/04/13 22:58:40
>>246
>UNIX環境でないとなかなか不便なものなんですね。
この点は同意なんだけどね。
しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
248:デフォルトの名無しさん
07/04/14 00:31:00
そんなに頻繁に使うようならスクリプトをちゃんと書けよ
てかperlの質問じゃなくて、コマンドラインについての質問だよな・・・
249:デフォルトの名無しさん
07/04/14 13:30:37
>>247
>しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
主観的且つ感情的な意味でしょうか?そうではないとしたら何か理由がおありですよね?
不便と思わない理由はなんでしょうか?
>>248
スレ違いになるかもですね。
そろそろ退散したいと思います。
250:デフォルトの名無しさん
07/04/14 13:32:25
>そんなに頻繁に使うようならスクリプト
?
251:デフォルトの名無しさん
07/04/14 17:11:52
#!/usr/bin/perl
# >>235 の望みを叶える夢のスクリプト:
exec 'perl', '-pi.bak', '-e "tr/A-Z/a-z/"', shift;
__END__
252:デフォルトの名無しさん
07/04/14 22:29:21
>>251
頭大丈夫?
253:デフォルトの名無しさん
07/04/14 22:41:39
大丈夫な人も大丈夫じゃない人も大丈夫って答えるから
間抜けな質問というしかない。
254:デフォルトの名無しさん
07/04/14 22:55:57
>>184
@a = grep {/(foo|bar|baz)/} split /(foo|bar|baz)/ , $_;
255:デフォルトの名無しさん
07/04/14 23:30:26
こんばんは。
会社のHP作成を引き継いだのですが、わからないことがあるのでどなたか教えていただけないでしょうか。
コンボボックスを外部のテキストから読み込んでいるのですが、途中までしか表示されないのです。
0<>--<><>
1<>A<><>
2<>B<><>
3<>C<><>
4<>D<><>
5<>E<><>
6<>F<><>
7<>G<><>
8<>H<><>
(中略)
14<>N<><>
上記が外部テキストの中身なのですが、コンボボックスには8までしか表示されないのです。
コンボボックスの方は
#編集モード以外は表示するだけ、編集モード時はコンボボックスで表示
if (!$edit) {$html .= "<td align=\"center\"><table width=\"100%\">";
for ($l = 0; $l < $periods; $l++) {
if ($showpname) { $html .= "<tr><td>$periodname[$l]</td>"; }
$html .= "<td align=\"center\">$STATUSSTR[$stats[$l]]</td></tr>";}
$html .= "</table></td>\n";}
となっています。
全てを表示させるようにするにはどこを変えたらいいのでしょうか。
(これだけの情報では不十分でしたらすみません。
他にどんな情報が必要かも教えていただければ幸いです)
Perl関連の本など読んでみたのですがわからなくて…
宜しくお願いします。
256:デフォルトの名無しさん
07/04/14 23:36:54
コンボボックスじゃなくて表で表示するコードに見えるが・・・。
257:デフォルトの名無しさん
07/04/14 23:48:58
>>256さん
あ、もしかしてここは関係なかったですかね…
カレンダーの1日ごとにコンボボックスが入っているので、そのカレンダーの方のコードなんでしょうか…
わからないことだらけのまま質問してしまってごめんなさい。
もう一度コードを見直してみます。
258:デフォルトの名無しさん
07/04/14 23:53:55
読み込まれたテキストデータがコンボボックスのどの変数になってるのかがわからない。
perlコードの、$periods、$showpname・・・とやらが何なのかわからないと
何もアドバイス出来ないよ。
259:デフォルトの名無しさん
07/04/15 00:03:49
>>258さん
そうですか…
$periodsなどなどは専門用語なのかなぁ、と思っていたのでそこから間違いだったのですね。
前任者とは全く連絡が取れず、初心者の私には何がなにやらさっぱりで…
失礼致しました。
もっと勉強して出直します!
260:デフォルトの名無しさん
07/04/15 00:23:13
periodつーたら何らかの「期間」じゃないのか?
261:デフォルトの名無しさん
07/04/15 00:39:39
>>260さん
期間…カレンダー関係ですかねぇ。
日ごとにアルファベッドを選択して登録するんですけど、
何ヶ月か分をまとめて登録してそれをScriptで(?)違うページに呼び出すので、それですかねぇ…
それにしても8番までしか出てこないのもどこかで指定してるんですかねぇ。
あまりにファイルが多すぎて、探すのに時間がかかりそうです…
262:デフォルトの名無しさん
07/04/15 00:52:49
>>255
本当にそのコードが該当コードなのかどうか怪しいね
ありうるとすれば@STATUSSTRの中が"<select>…"といったhtmlになってるとか
とりあえずPerlの配列変数は先頭の記号が $ だったり @ だったりするので
それだけ注意して変数をさかのぼって行くとか
お節介だけど$showpnameのif文、通らない場合に開始<tr>タグ欠けるよ
263:デフォルトの名無しさん
07/04/15 01:03:42
俺なら解読するの諦めて書き直したくなるな
264:デフォルトの名無しさん
07/04/15 01:56:12
>>255
エスパーのおいらが予測するには、>>255 が挙げた箇所の次に
} else {
という行があり、その後の部分が問題の部分なんだろうな。
265:デフォルトの名無しさん
07/04/15 06:52:58
perlのソースコードの中に直接HTMLが書かれているなら
「type="select"」あたりで検索すれば、該当個所の近辺の
コードに当たるんじゃないか?
266:265
07/04/15 06:55:31
間違えた。「type="select"」じゃなくて「<select」だな。
267:デフォルトの名無しさん
07/04/15 23:51:49
>>255さんには内緒で、実はその前任者さんをこのスレにお呼びしています^^。
実は前任者さん、その書き込みの様子をモニターを通して見ておりました。
では、心に引っかかっていた辛い過去。
あの時、伝えられなかった想いを今、、、
268:デフォルトの名無しさん
07/04/16 00:50:06
perlの時代は終わった・・・
これからの初心者は、今の時代に合った言語を使ってくれ・・・
・・以上
269:デフォルトの名無しさん
07/04/16 00:53:48
ruby?python?
270:デフォルトの名無しさん
07/04/16 01:04:26
情報保護の時代だからな。
Whitespaceだろ。
271:デフォルトの名無しさん
07/04/16 04:53:46
仕事をPHPいじってから、Perlを汚い言語だなんて言ってた自分の愚かさに気づいた。
Perlは消えなくていい。PHP、頼むから消滅してくれ。
272:デフォルトの名無しさん
07/04/16 04:56:25
s/(?<=仕事)を/で/
273:デフォルトの名無しさん
07/04/16 06:08:15
255です。
皆さんどうもありがとうございます。参考になりました!
ここで皆さんにお聞きするにはあまりにも自分が無知すぎて申し訳ないです。
更新は休みの土日しかできないので、来週までに色々調べてまた挑戦します。
>>262さん
なるほど…
<tr>タグの件、ご指摘ありがとうございます!
>>263さん
書き直すなんて絶対無理ですので頑張って解読したいと思います…
>>264さん
} else { って部分あります!!
その部分に注意してみます。
>>265さん
検索ですね。htmlがperlの中にあるので試してみます!
>>267さん
実は前任者とは全く面識がないので、あの時も何もあったもんじゃない、って感じなのですが…
274:デフォルトの名無しさん
07/04/16 14:16:33
>>225
すんげー今更だな
google出来た頃から規約に書いてあるし
URLリンク(www.google.co.jp)
275:デフォルトの名無しさん
07/04/17 06:50:02
まさかLWP使ったらすべて自動クエリだとか思ってる訳じゃないよな。
276:デフォルトの名無しさん
07/04/17 06:59:52
>検索結果ページに対して
ってあるからなぁ
277:デフォルトの名無しさん
07/04/17 13:36:22
質問です
$var = 010203 とあります
これを
$var = 01/02/03
このように2桁ごとにスラッシュを入れるにはどうしたらよいでしょうか?
0102 や 01、01020304 の場合などどの桁数にも対応したいです
278:デフォルトの名無しさん
07/04/17 13:43:51
perl -e '$var="010203"; $var=~s/([0-9]{2})/$1\//g;print $var;'
279:デフォルトの名無しさん
07/04/17 15:07:07
ありがとうございます
できました
280:デフォルトの名無しさん
07/04/17 15:48:19
正規表現の中にスラッシュがあるときはエスケープするより
s{([0-9]{2})}{$1/}g
とかの方が良い気がする
281:デフォルトの名無しさん
07/04/17 16:06:26
0-9より\dのがいい気がする
282:デフォルトの名無しさん
07/04/17 16:11:38
'010203' のとき '01/02/03/' になる気がする
283:デフォルトの名無しさん
07/04/17 16:44:03
s{\d{2}(?=\d)}{$&/}g;
かな
284:デフォルトの名無しさん
07/04/17 17:15:38
$& 使うくらいだったら普通に join したくなるなあ、俺は。
perl -le '$var = qq{010203} ; print join q{/}, ( $var =~ /(\d{2})/g )'
285:デフォルトの名無しさん
07/04/17 19:37:56
まあ一般には \d は 0-9 の必要条件であって同値ではないけどな。
286:デフォルトの名無しさん
07/04/17 19:46:31
こういうことか
$ perl -e 'use utf8; print q[0] =~ /\d/'
1
287:デフォルトの名無しさん
07/04/17 22:03:19
J2EEの方がいい気がする
288:デフォルトの名無しさん
07/04/17 22:40:33
>>277
3桁区切りにカンマをつけるというのがよくあるから
それを参考に好きなの使えば?
289:デフォルトの名無しさん
07/04/17 22:57:26
>>282
答えはそれでいいんだろ?
290:デフォルトの名無しさん
07/04/17 23:59:03
>>289
質問者の出してる例はそうは言ってないぞ。
291:デフォルトの名無しさん
07/04/18 03:02:24
>>277
Date::Manipでできんじゃね?
292:壁| x ・)つ○
07/04/18 03:09:07
こういうのは こうりつわるいですか?
for ($i = 2; $i < rindex($var, ""); $i += 3) {
substr($var, $i, 0) = "/";
}
293:デフォルトの名無しさん
07/04/18 12:07:56
$var = reverse( ( $var = reverse $var ) =~ s{(\d\d)(?=\d\d)}{$1/}g );
294:デフォルトの名無しさん
07/04/18 12:18:50
近頃はs#・・・#・・・#って書き方見なくなったな
295:デフォルトの名無しさん
07/04/18 13:07:55
>>292
人間の読み書きの部分で効率悪いと思う
296:デフォルトの名無しさん
07/04/18 14:36:58
1 while $var =~ s/(\d{2})(\d{2})/$1\/$2/g;
297:デフォルトの名無しさん
07/04/18 14:43:01
s/(\d{2})(?=\d{2})/$1\/$2/g
298:デフォルトの名無しさん
07/04/18 16:53:45
>>297
$2なんてないじゃん
299:デフォルトの名無しさん
07/04/18 17:11:53
>298
なにを言っているんだお前は。
300:デフォルトの名無しさん
07/04/18 17:40:37
いやさ、 (?= ) は後方参照を生成しないだろう?
> perl -e "q/123/ =~ /(\d)(?=\d)(\d\d)/; print $2;"
23
そもそも、(?= )はゼロ幅先読みだろう。
> perl -e "q/123/ =~ /(\d)((?=\d))/; print $2;"
(出力なし)
301:デフォルトの名無しさん
07/04/18 20:54:57
>>295 なるほど ワンライナーでさらっとかけるよう しょうじんいたします
・)つ● ←おれいのしな
302:デフォルトの名無しさん
07/04/19 10:56:55
>>300
そのとおり。適切な指摘ありがと。書いてから気がついた。
>>283か、
s|(\d\d)(?=\d)|$1/|g
みたいな感じで。
303:デフォルトの名無しさん
07/04/19 22:59:05
ファイル出力の質問です
open IN , ">$failename";
print IN , "test;
close IN;
で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz
助けてエロい人
304:デフォルトの名無しさん
07/04/19 23:02:26
>>303
> で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz
さあ、「なんかうまく言ってくれないんです」の「なんか」を推定するクイズです!!
305:デフォルトの名無しさん
07/04/19 23:08:28
これは流石に釣りだろう
306:デフォルトの名無しさん
07/04/19 23:11:10
エスパーの私がお答えしよう。
Windows で \ 記号がディレクトリ名の区切りなもんだから
ダブルクォーテーションで括っただけだとエスケープと
解釈されちゃって変な文字列完成。→オープン→エラー。
そんなファイルはねえよヴォケと $! に入っている。
307:デフォルトの名無しさん
07/04/19 23:34:21
$failename (フェイルエネーム?) だからではないか・・・なんてことはないか。
そもそも IN じゃなくて OUT だろうと
use Fatal qw(open close);
open my $out, '>', $filename;
print {$out}, "test";
close $out;
308:307
07/04/19 23:39:40
- print {$out}, "test";
+ print {$out} "test";
309:デフォルトの名無しさん
07/04/19 23:40:55
{$out}
310:デフォルトの名無しさん
07/04/19 23:54:37
{$safe}
311:265
07/04/19 23:58:02
$failename =~ s/^/zettaipath\/;
312:303
07/04/20 00:05:38
みなさま マジでありがとうです
こんな初心者をささえてくれてありがとお つω;
313:デフォルトの名無しさん
07/04/20 01:32:59
なんかうまく言えました
314:デフォルトの名無しさん
07/04/20 03:42:05
うまく言えないけれど宝物だよ
315:デフォルトの名無しさん
07/04/20 03:53:44
僕たちはできる!! できるんだ!!
316:デフォルトの名無しさん
07/04/20 03:54:26
最高ですか!!?
最高です!!!
317:デフォルトの名無しさん
07/04/20 12:14:51
プラス思考のスレはここですか?
318:デフォルトの名無しさん
07/04/20 15:30:27
プラス指向プログラミング POP
319:デフォルトの名無しさん
07/04/20 19:25:20
@http = $_ =~ /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g;
print FILEA @http;
このような記述をしたら、
Variable "@http" is not imported at http-client.pl line 53.
Variable "@http" is not imported at http-client.pl line 54.
Global symbol "@http" requires explicit package name at http-client.pl line 53.
Global symbol "@http" requires explicit package name at http-client.pl line 54.
と言われました。
これは何のエラーですか!?
320:デフォルトの名無しさん
07/04/20 22:19:47
@httpを括弧でくくってください
321:デフォルトの名無しさん
07/04/20 23:21:12
>>319
Variable "@http" is not imported については、perldiagをどうぞ。
というか、「何の」もなにもperlが出しているエラーなんだからまずはここで調べるべし。
つ URLリンク(perldoc.jp)
とりあえず、use strictなのに @http が生で使われているのが原因ですので、パッケージを明示的に
指定して使うか、my宣言すればいいのでは。
322:デフォルトの名無しさん
07/04/21 23:17:55
PDFを解析したいんですが、どのような方法で読み込んでいったらいいと思いますか?
ちなみに、PDFの仕様として:
・改行文字はCR,LF,CRLF,のどれでもよい。
・文字列内での改行文字はそのままのかたちで残さなければならない。
・文字列内で(見た目のために)改行したいときは \改行文字 とする。
read(FILE, $buf, 512) ってのもめんどくさそうだし、できれば while(<FILE>) で
済ましたいんですが、意味のある改行もあるしなぁ。。。
323:デフォルトの名無しさん
07/04/22 00:20:39
>>322
何をしたいのか知らんが、まずCPANでPDF関係のモジュールを
サーチしたほうがいいね。
あなたがしたいことを既に実現しているモジュールがあるかもしれないし、
少なくとも、改行文字の扱い方については、ソースの中にお手本が
あると思うし。
324:303
07/04/22 04:50:29
303ですが またまた超初心者な質問です。
requier './jcode.pl';
sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }
ってコードがあったのですが
&jcode の後ろについている ' の意味がわかりません。
もしかして
&jcode::convert(*msg,'jis');
と同義ですか?
エディターの色分けが気持ち悪くなるので直したいです。教えてエロい人 Orz
325:デフォルトの名無しさん
07/04/22 05:35:13
Perl4
326:デフォルトの名無しさん
07/04/22 05:37:45
>>324
エロい人よりマニュアルに頼ろうよ。
<q cite="URLリンク(www.kt.rim.or.jp)
古いパッケージ区切り子はシングルクォートでしたが、
現在はダブルコロンを使うのが推奨されています。
</q>
URLリンク(mikeneko.creator.club.ne.jp)
327:324
07/04/22 11:13:18
なるほど! ありがとうございました ><
Jcodeの使い方も含めて勉強してきます ><ノ
328:デフォルトの名無しさん
07/04/22 14:43:25
CPAN でインストールする際に以下のようなメッセージが出て失敗します。
Undefined subroutine &Compress::Zlib::gzopen called at /usr/local/lib/perl5/5.8.8/CPAN.pm line 5721.
何をインストールしても大体このエラーが出て失敗します。
Zlib は、
/usr/local/lib/perl5/site_perl/5.8.8/Compress/Zlib.pm
にあって、サブルーチン gzopen もありました。
また、@INC に /usr/local/lib/perl5/site_perl/5.8.8 は含まれていました。
どこに問題があるか分からないのですが、教えてもらえないでしょうか。
環境は、
OSX 10.4.9 で Perl 5.8.8 を /usr/local/bin にインストールしました。
329:デフォルトの名無しさん
07/04/22 16:09:08
>>328
あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
/usr/local/bin/perl ってことに間違いはない?
330:デフォルトの名無しさん
07/04/22 16:35:51
>>329
レスありがとうございます。
>あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね?
はい。ソースコードからインストールしたらそこにインストールされたので、
/usr/local/bin/perl を使っています。
>で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
>/usr/local/bin/perl ってことに間違いはない?
間違いないはずです。
which perl で確認しました。
CPAN.pm の該当箇所をみると、
$CPAN::META->has_inst("Compress::Zlib") で判定した後に、
Compress::Zlib::gzopen を呼び出していました。
そこで gopen がないとなる理由がよく分かりません。
331: ◆TWARamEjuA
07/04/22 17:40:08 BE:2287837-2BP(6823)
>>330
> >で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、
> >/usr/local/bin/perl ってことに間違いはない?
> 間違いないはずです。
> which perl で確認しました。
$env
してみると判るけれども標準ではpathが通っていないと思うですです。
PATH=/bin:/sbin:/usr/bin:/usr/sbin
@MacOSX 10.4.9
もっぺん確認してみよう♪
♯tu-ka未だに5.8.6のままなんだよなぁ。。。(´・ω・`)
$ perl -v
This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 3 registered patches, see perl -V for more detail)
332:デフォルトの名無しさん
07/04/22 17:55:38
>>331
レスありがとうございます。
$env
で確認してみましたが、先頭に/usr/local/binがありました。
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin
こうなるように、以前./bash_profile に追加しました。
となると、原因は不明でしょうか?
インストールの仕方が悪かったのかなあ。
333:デフォルトの名無しさん
07/04/22 20:53:01
CPANなんてまともに動作すると思うほうがおかしい。
手動で入れろ。
334:デフォルトの名無しさん
07/04/22 21:21:50
>>323 THX
PDFファイルのすべてを把握するのが目的です。
CPANをみたところ、PDFのテキストや書誌情報を抽出したりするためのAPIは用意されてる
のですが、もっと低レベルなパーサーがないようです。。
各種トークンが出現するたびにイベントを起動するような奴がほしいんですが。
HTML::ParserのPDF版でPDF::Parserみたいな感じの奴です。
335:デフォルトの名無しさん
07/04/22 23:26:59
日曜潰してまだ分からないので、どなたか助けてください\(ToT)/
UTF-8でURIエスケープされた文字列を、アンエスケープするPerlの処理でけつまづいてます。
元の文字列をURIエスケープした文字列がサーバ側まで来ているのは確認しました。
「質問」→「%E8%B3%AA%E5%95%8F」だとか、「ü」→「%C3%BC」だとか。
これを
$utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi;
しても、正しくアンエスケープされない(文字化けする)のです。
UTF-8が可変バイトなのが曲者なのでしょうか。。。
ググった先(URLリンク(oshiete1.goo.ne.jp))の
$utf8str =~ s/%(e[a-f\d])%([a-f\d]{2})%([a-f\d]{2}/pack('H2',$1).pack('H2',$2).pack('H2',$3)/egi;
してもやはりだめでした。
336:デフォルトの名無しさん
07/04/22 23:56:33
>>333
むあじっすか。
337:デフォルトの名無しさん
07/04/22 23:59:22
>335
use Encode qw/from_to/;
my $str = '%E8%B3%AA%E5%95%8F'; # utf8の'質問'をエスケープ
(my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi;
from_to($dec, 'utf8', 'cp932'); # Winのコマンドプロンプトで表示するのでcp932にしてる
print $dec;
とりあえずこれで動いてるけど? ブラウザに出してるんなら、Shift_JISって解釈されてるとかじゃない??
338:デフォルトの名無しさん
07/04/23 00:01:31
>>335
> $utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi;
$1のための括弧が閉じられてません。
あとは、UTF-8に対応したEditorで開いてないとかでしょうか。
上の式で正しくアンエスケープされました。
339:デフォルトの名無しさん
07/04/23 00:35:06
括弧閉じ忘れでごめんなさいorz
>>337さんのスクリプトを実行したところ、文字化けしませんでした。
また、from_toする前でも、ファイルにリダイレクトして、
そのファイルをエディタで開いても同様に文字化けしていませんでした。
しかし、サーバに持って行ってブラウザに結果を出すと文字化けしてしまいます。
エディタはUTF-8に対応していて、Perlスクリプトもutf-8で保存して、
use utf8; use open ":utf8"; use open ":std";して、
print "Content-type: text/html; charset=utf-8\n\n";
いるのですが、
>>337さんのものでprint $dec;でもprint $str;でも駄目(文字化け)でした。
環境はWin XP SP2 + IE7、[表示]-[エンコード]でもUTF-8であることを確認しているのですが。。
。
度々で申し訳ないのですが、他に何か怪しい箇所がありますでしょうか?
340:デフォルトの名無しさん
07/04/23 00:49:03
#!/usr/bin/perl
my $str = '%E8%B3%AA%E5%95%8F';
(my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi;
print "Content-Type: text/plainl; charset=utf-8\n\n";
print $dec;
__END__
とりあえず手元だとこれで動いてる。まずは問題の発生する最小限のコードまで切り詰めてみ?
341:337
07/04/23 01:17:20
ありがとうございました!解決しました。
use open ":std";が余計でした(よく分からないのに「おまじない」で書くのは駄目でしたね)。
問題のスクリプトから上記を除いて、かつ、
自分で作って読んでいるモジュールからも上記を除きました。
本当にありがとうございます!
342:デフォルトの名無しさん
07/04/23 01:18:56
自分(↑)は>>337さんでなくって>>335でした。お目汚しでごめんなさい。
標準入出力を使わないなら、use open ":std";等は確かに不要でした。
343:335
07/04/23 03:15:36
事後報告がてら・・・
use open ":std";を外せばアンエスケープで文字化けしないものの、
今度は後続処理でUTF-8な文字を処理できないという問題がありました。
結局、以下のサイトを参照して、
URLリンク(naoya.dyndns.org)
use open ":std";は残したままで、アンエスケープ処理の後に
utf8::decode($str);でUTF8フラグを落とせば、
スクリプトへのUTF-8文字列の受け渡しも、後続処理も、うまく行きました。
夜更けにお答えくださって、本当にどうもありがとうございました。
これで安心して眠れそうです。
344:デフォルトの名無しさん
07/04/23 18:08:16
■ Perl言語 ■ 何でも質問コーナー ■
URLリンク(mixi.jp)
Perlに関すること、cgiに関すること
なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!)
(Web系であればOK)
ルール:
Google検索で調べてわかるようなことでも質問してもOKです
(初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので)
回答してくださるかたは、暖かく質問者を迎えてやってください
o(^^o) (o^^)o
345:デフォルトの名無しさん
07/04/23 18:19:57
そのトピック自体はどうでもいいんだが
コミュニティのタイトルとか説明文が凄く気になって仕方が無い。
346: ◆TWARamEjuA
07/04/23 19:56:34 BE:3485748-2BP(6823)
コミュニティの名前
PERL言語 CGI言語
コミュニティの説明
perl言語 cgi言語のコミュニティです
だそうです。。。
347:デフォルトの名無しさん
07/04/24 04:11:19
Web系NGなこのスレとうまく連携していければいいですねo(^^)o
348:デフォルトの名無しさん
07/04/24 08:17:44
未だにCGIが(ry
349:デフォルトの名無しさん
07/04/24 10:36:14
ダメそうなコミュだなw
350:デフォルトの名無しさん
07/04/24 22:51:58
どうしようもない質問の数々に、「ちったぁマニュアル読んでください!」と、
最後に管理者がキレるに1票。
351:デフォルトの名無しさん
07/04/25 02:27:30
いやあ管理人もろくすっぽ読んでないんじゃないか?
352:デフォルトの名無しさん
07/04/25 11:12:27
実は、管理人自身が2ちゃんねるで質問したところ、
「ググれカス」だの「マニュアル嫁」みたいな回答しか
返ってこなかったので、管理人にやさしく教えてくれる
ところが欲しかったんじゃないの?
353:デフォルトの名無しさん
07/04/25 12:06:40
>>352
もちろんそうでしょ。
そうじゃなきゃルール書きの冒頭が「Google検索で調べて
わかるようなことでも」で始まるわけないっすよ。
354:デフォルトの名無しさん
07/04/25 12:33:51
モヒカン族はお断りです><
355:デフォルトの名無しさん
07/04/25 17:38:48
モヒカン族の土地に侵入してきたくせに、大きい顔をするな
356:デフォルトの名無しさん
07/04/25 19:00:43
座り込んで動かない、口だけ達者なでっぷり太ったモヒカン族ほど
役に立たないものはない。
川に流してしまいたい。
357: ◆TWARamEjuA
07/04/25 20:55:45 BE:980633-2BP(6824)
不法投棄しちゃダメです♪
358:デフォルトの名無しさん
07/04/25 21:32:05
食肉に加工するというのはどうだろう
359:デフォルトの名無しさん
07/04/25 22:08:09
強くなれ!! と願いを込めて、子供たちに食べさせるとよいね。
360:デフォルトの名無しさん
07/04/25 23:13:46
弱者の肉なんかいくら食べても強くなれないよ
361:デフォルトの名無しさん
07/04/25 23:27:06
食べるのなら、戦場で最前線に立つモヒカンを食べよう。
362:デフォルトの名無しさん
07/04/26 09:20:12
/ : 》:、∩
(===○=)/ センセー
__ / ⇔ / 話しについてけませーん
\⊂ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
363:デフォルトの名無しさん
07/04/26 22:17:39
>>346
CGI言語と来たか・・・。
本当に作ってしまって混乱させるというのはどうか?
もちろんその言語はクライアントマシンの限られた
中でしか使えず、 Web の CGI になんて使えないのだ。
364:デフォルトの名無しさん
07/04/26 22:18:42
Common Graphics Interface とかいう紛らわしいグラフィック操作用言語を新たに作る。
365:デフォルトの名無しさん
07/04/26 23:07:10
parrot上で走らせたらもっと混乱の元に。
366:デフォルトの名無しさん
07/04/26 23:15:11
コモン グラフィックス インタープリター
池袋で乗車してきた女の子がハロプロエッグの子とかたかまりこ
367:デフォルトの名無しさん
07/04/27 11:39:27
ついでだ。IT言語というのも作ってしまえ。
368:デフォルトの名無しさん
07/04/27 11:57:03
そろそろここは質問箱だということを思いだそう。
369:デフォルトの名無しさん
07/04/27 15:28:36
そういえば Perl の質問がないなあ・・・。
370:デフォルトの名無しさん
07/04/27 15:34:31
Chanto Gugure Internet de
371:デフォルトの名無しさん
07/04/27 17:29:18
perlってグーグル八分されてるんだってね
372:デフォルトの名無しさん
07/04/27 18:13:20
WindowsでDOSコマンドの結果を取り込むには、
どうすればよろしいでしょうか?例えば、
dir c:\trash
の結果を取り込もうとしても、次のスクリプトではうまくいきません。
$files = `dir c:\\trash`;
print "The files are $files\n";
373:デフォルトの名無しさん
07/04/27 18:43:53
GW前に出された宿題で質問が増えるから大丈夫w
374:デフォルトの名無しさん
07/04/27 18:53:55
>372
手元だとそれでうまくいってるけど。
375:372
07/04/27 20:04:12
>>374
すみません。書き忘れていました。>>10にある先頭の5行を入れていました。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
「use open IO => ":encoding(cp932)"; 」の行を削除して
次のように修正すると動きました。
use Encode;
$orgfiles = `dir c:\\trash`;
$files = decode('cp932', $orgfiles);
print "The files are $files\n";
376:デフォルトの名無しさん
07/04/27 21:23:44
>>372
例によって cmd.exe /c dir ... じゃない?
377:デフォルトの名無しさん
07/04/27 21:24:53
失礼、関係なかったのね。
378:デフォルトの名無しさん
07/04/27 21:35:08
>371
記号が多いから、とか?
379:デフォルトの名無しさん
07/04/27 22:21:10
>>378
うんにゃ、LWPのUAがはじかれる件でしょ?
380:デフォルトの名無しさん
07/04/27 22:23:19
>>378
Perlで書かれたボットの多くがLWPのデフォルトUser-Agentをそのまま名乗って
おり、403を食らうようになった。当然だがUAを変えれば通れる。
381:デフォルトの名無しさん
07/04/27 22:24:27
Google八分ってのは、Googleの検索結果に出なくなる話だから、
今回のそれとは違うよな。
382:デフォルトの名無しさん
07/04/27 22:30:29
新しく覚えた言葉を使ってみたかっただけだろ
そう責めるな
383:デフォルトの名無しさん
07/04/28 00:19:39
perlのモジュールって一気にアップデートできないの?
それとも使う奴だけ手動でアップデートさせるしか方法ない?
384:デフォルトの名無しさん
07/04/28 00:39:19
>383
cpanシェルでupgrade
385:378
07/04/28 01:18:47
Perlに限らないけど、プログラミング言語の仕様として存在する演算子や記号は検索しづらいよなあ。
386:デフォルトの名無しさん
07/04/28 03:22:17
不満を抱えるものが改善する。それが基本である。
387:デフォルトの名無しさん
07/04/28 05:09:49
でもそれを誰かが改善したらPythonっぽい何かになるからPythonでいいよねw
388:デフォルトの名無しさん
07/04/28 17:56:47
比較演算子は記号じゃなくて文字列にすりぁいいんだよな
Pealのeqとかみたいにさ
389:デフォルトの名無しさん
07/04/28 19:26:07
>>380
なったと言っても数年前からだよ。
今頃騒いでるやつらはアンテナが低すぎると思ったのだった。
390:デフォルトの名無しさん
07/04/29 01:57:47
struct {
char len1;
char word1[len1];
char len2;
char word2[len1];
char len3;
char word3[len1];
}
みたいな構造の可変長のバイナリなデータがあるんですが、
これをperlで綺麗でかっこよく展開する方法ってないですか?
今は下のようなことをしてるのですが、なんか見辛いし汚いので…
$data = "\4ABCD\3EFG\7HIJKLMN";
($len1,$data) = unpack("Ca*",$data);
($word1,$data) = unpack("a${len1}a*",$data);
($len2,$data) = unpack("Ca*",$data);
($word2,$data) = unpack("a${len2}a*",$data);
($len3,$data) = unpack("Ca*",$data);
($word3,$data) = unpack("a${len3}a*",$data);
print "$word1\n$word2\n$word3\n";
391:デフォルトの名無しさん
07/04/29 03:40:49
少なくともループ構造にするべきだと思う
392:デフォルトの名無しさん
07/04/29 04:06:37
>>390
perldoc -f pack して目を皿のようにして熟読せい。
The "/" template character allows packing and unpacking
of strings where the packed structure contains a byte
count followed by the string itself. You write
*length-item*"/"*string-item*.
393:デフォルトの名無しさん
07/04/29 05:12:56
>>392
あああああ、そんなテンプレートがあったんですね。
日本語の5.6ベースのman見てたので気づきませんでした…
ありがとうございます。
394:デフォルトの名無しさん
07/04/30 02:59:39
>>393
あ、すまん。
5.6からの拡張だと思ってたが、違ったか(393には問題ないみたいでよかった)。
395:デフォルトの名無しさん
07/05/01 17:38:05
ファイル内の文字列を置換するスクリプトを書いているところなのですが、
「置換する」「置換しない」(飛ばす)「残り全て置換」「キャンセル」という
処理を行うにあたって、見つけた文字列を置換せずに飛ばして次を置換する
方法が思いつきません。置換しないテキストは適当な文字列に置換しておいて
最後に戻すという方法も考えたのですが、あまりスマートではないと思いまし
た。何かよい方法があったら、お知恵をお貸しください。
while($text =~ /($regexp)/) {
if($all == 0) {
$before = $1;
$after = $1;
$after =~ s/$regexp/$replace/m;
print "置換前:\n$before\n置換後:\n$after\n";
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>;
chomp($key);
} while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g");
if($key eq "y"){
$text =~ s/$regexp/$replace/m;
}elsif($key eq "n"){
# ここをどうする?
}elsif($key eq "a"){
$text =~ s/$regexp/$replace/gm;
$all = 1;
}else{ exit; }
}elsif($all == 1) {
$text =~ s/$regexp/$replace/gm;
}
}
396:395
07/05/01 17:39:43
補足です。$textはファイルの内容、$regexpは置換前の文字列、$replaceは
置換後の文字列です。
397:デフォルトの名無しさん
07/05/01 17:51:02
>>395
ヒント: posと\G
perl -e '$x = "aaaaaa"; pos($x) = 2; $x =~ s/\Ga/x/; print $x,"\n";'
aaxaaa
398:395
07/05/01 21:09:08
ありがとうございます、無事できました。コードはこのようになりました。(たぶん問題ないはず…)
$p = 0;
while($text =~ /\G(?:.*\n)*?.*?($regexp)/gm) {
$p = pos($text) - length($1);
pos($text) = $p;
if($all == 0) {
$before = $1;
$after = $1;
$after =~ s/$regexp/$replace/m;
print "置換前:\n$before\n置換後:\n$after\n";
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>; chomp($key);
} while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g");
if($key eq "y"){
$text =~ s/\G$regexp/$replace/m;
pos($text) = $p + length($after);
}elsif($key eq "n"){
pos($text) = $p + length($before);
}elsif($key eq "a"){
$text =~ s/\G$regexp/$replace/gm;
$all = 1;
}else{
exit;
}
}elsif($all == 1) {
$text =~ s/\G$regexp/$replace/gm;
}
}
399:デフォルトの名無しさん
07/05/01 21:31:38
\Gの使い方がおかしいような
最後の全置換は絶対うまくいかんだろ
400:デフォルトの名無しさん
07/05/01 22:01:18
せっかく書いたんだからたぶんとかいってないで動かしてみるべきだな。
401:395
07/05/01 22:02:38
すみません、やっぱ問題がありました。置換位置\Gが正規表現に含まれている
と、置換される文字列に改行が含まれている際に、オプション"g"をつけても
複数置換してくれなくなってしまうのですが、どうすればいいんでしょうか。
perl -e '$text = "a\na\na"; $text =~ s/\Ga/b/gm; print "$text\n";'
結果:
b
a
a
perl -e '$text = "aaa"; $text =~ s/\Ga/b/gm; print "$text\n";'
結果:
bbb
perl -e '$text = "a\na\na"; $text =~ s/a/b/gm; print "$text\n";'
結果:
b
b
b
402:デフォルトの名無しさん
07/05/01 22:23:56
\Gは置換文では使わないほうがいいよ。代入されるとposがリセットされてしまうから
あとを置換しながらposを保持することはできないのでコピーを作ることを考えてみては
自分ならこう書く
my $replaced_text;
pos $text = 0;
while (pos $text < length $text) {
if ($text =~ m/\G $regexp/gcsx) {
# ここで入力による分岐処理を行う
}
elsif ($text =~ m/\G(.+?) (?=$regexp)/gcsx) {
$replaced_text .= $1;
}
else {
$text =~ m/\G (.*)/gcsx;
$replaced_text .= $1;
}
403:デフォルトの名無しさん
07/05/01 22:28:17
s///gが一種のループなのでこんな手もある。
my $mode;
$text =~ s{($regexp)}{
my $r;
if (!defined $mode) {
my $key;
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>;
chomp($key);
} while ( $key ne "y"
and $key ne "n"
and $key ne "a"
and $key ne "g" );
if ($key eq 'y') {
$r = $replace;
} elsif ($key eq 'n') {
$r = $1;
} elsif ($key eq 'a') {
$mode = 'a';
} else {
$mode = 'g';
}
}
if ($mode eq 'a') {
$r = $replace;
} elsif ($mode eq 'g') {
$r = $1;
}
$r;
}gme;
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5368日前に更新/220 KB
担当:undef