[過去ログ] Perlについての質問箱 64箱目 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
907
(1): 2020/12/28(月)21:50 ID:gLlPtDZl(1) AAS
>>905
わかってるやん
レスコジキなら他に行ってくれ
908: 2020/12/30(水)20:09 ID:ygO1FIcm(1) AAS
過疎ってる方が落ち着くという人もいるらしい
909: 2020/12/30(水)20:26 ID:ZDzqqnZf(1) AAS
初心者が嫌いな「上級者」で過疎っているほうが落ち着くなら、このスレがいいな。

【Perl上級者コーナーPart01】
2chスレ:php
910: 2020/12/30(水)21:55 ID:Fpo/gio8(1) AAS
>>907
わかってるとはいえんよ。
結果のおうむ返しだけみたいだからな。

落ち着いて考えればわかるはずだし、それでしっかり納得したほうがいいことだから、元コメに返事はしないが。
911
(1): 2021/01/03(日)17:25 ID:Lv3VCxJc(1/2) AAS
ブラウザのクッキーを許可してるかどうかを調べるにはどうしたらいいんですか?
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で
912: 2021/01/03(日)17:33 ID:qCTYrijY(1) AAS
お、今年初めの質問だね。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。
913
(1): 2021/01/03(日)19:13 ID:fvS6UGyp(1/2) AAS
>>911
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね
914
(2): 2021/01/03(日)20:53 ID:Lv3VCxJc(2/2) AAS
>>913
なるほど、でもそれ無限ループにならないっすか?
915: 2021/01/03(日)21:41 ID:Y2yZ564Q(1) AAS
>>914
サーバーで判定したらええやろ。
そもそもそういう話のはず。
916: 2021/01/03(日)21:44 ID:fvS6UGyp(2/2) AAS
>>914
クエリパラメータ追加するなり工夫すれ
917: 532 2021/01/25(月)02:03 ID:NGykvctj(1) AAS
外部リンク:perlcodesample.hateblo.jp
918
(1): 2021/02/13(土)20:39 ID:puXqs/bZ(1/2) AAS
U+10000からU+1FFFFまでの文字があったら置換したい時はどう書けばいい?
919: 2021/02/13(土)20:57 ID:aGYlIUX0(1) AAS
>>918
s/U¥+(1¥x{4})/pack(q{U},$1)/eg
とかか?

外部リンク[pod]:perldoc.jp
920
(1): 2021/02/13(土)21:54 ID:puXqs/bZ(2/2) AAS
あー
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい
921: 2021/02/14(日)01:36 ID:u5RUQBwf(1/2) AAS
>>920
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。

つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。
922: 2021/02/14(日)07:32 ID:kRUK3Bbl(1) AAS
$line =~ s/\x{1f306}/置/g;
これは成功する
$line =~ s/\x{1....}/置/g;
こんなことをやろうとしてた
$line =~ s/[\x{10000}-\x{1ffff}]/置/g;
これが正解だった
923
(1): 2021/02/14(日)10:00 ID:yrV2Bu9C(1) AAS
Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。
924: 2021/02/14(日)11:18 ID:u5RUQBwf(2/2) AAS
>>923
Perlに限らんやろ。
エンコーディングをまったく気にせず対応している処理系なんか存在しない。
925
(1): 2021/03/03(水)18:48 ID:Q9ky3RP3(1/2) AAS
start:aaa1
end:bbb1
value:1.23
start:aaa2
end:bbb2
value:2.34

データとして上記のようなstart,end,value値が違うデータがだらっと繰り返ししてるファイルがあって
下記の正規表現で名前付きキャプチャを使って繰り返しマッチングし%+ハッシュを配列に格納したいのですが、こんな感じでやるとそれぞれのデータが順に入ってしまいます。
どう書けばマッチングした各ハッシュを配列に格納出来るのでしょうか?
$re=qr|start:(?<start>\S+).*?end(?<end>\S+).*?value:(?<value>\S+)$|sm;
my @data = m|$re|g =~ $txt;
926
(1): 2021/03/03(水)20:20 ID:DgitZS9x(1) AAS
正規表現を使うところではない気がするな。w
ちょっとおちついて、行単位で処理していけよ。
927
(1): 2021/03/03(水)23:36 ID:Q9ky3RP3(2/2) AAS
>>926
そういうもんなんですか?
pythonだとre.finditerでイタレータ毎に取れるので似たような感じにperlでもどうにか出来るんだろうと思ったのですが無理そうなら諦めます
928
(1): 2021/03/04(木)00:03 ID:ls8aTj6l(1) AAS
Ruby なら、

line_num = 0 # 行番号

# 行末の改行を削除して、1行ずつ処理する
results = File.foreach( "test154_data.txt", chomp: true ).with_object( [ ] ) do |line, accm|

line_num += 1
# 3行毎に、ハッシュを作って、蓄積変数に追加する
accm.push Hash.new if line_num % 3 == 1

ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
hash = accm.last # 最後の要素
hash[ ary[ 0 ] ] = ary[ 1 ]

end

p results

出力
[{"start"=>"aaa1", "end"=>"bbb1", "value"=>"1.23"},
{"start"=>"aaa2", "end"=>"bbb2", "value"=>"2.34"}]
929: 2021/03/04(木)00:11 ID:Pkas/NOZ(1) AAS
>>927
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。

しかし、オレならやらん。
Pythonは詳しくないが、たぶんそれでもやらんやろなあ。

正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。
また、対象はファイルの内容だそうだが、ReDoSは知ってるか?
930: 2021/03/04(木)00:24 ID:u/riWi2o(1) AAS
なんで急にRubyが出てくるんだよ(呆れ
931: 2021/03/04(木)00:42 ID:2AXWpxTy(1) AAS
perlリスペクト公言言語だから敬意を評してるんじゃないかな、大目に見てあげよう
932: 2021/03/04(木)09:09 ID:8OZ033Zi(1) AAS
元がファイルだからなあ
1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える

正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現
933: 2021/03/07(日)10:07 ID:Anqe+9Rf(1/4) AAS
forkがハングする。

見えてる範囲だと、memoryの使用量が関係してかもしれないです。
firefoxを使って1G程度メモリを食わせてからスクリプト走らせると、forkが返ってこなくなる。
この時のメモリ使用量は他も併せて25%程度。閉じてから再度走らせるとちゃんと動く。
エラー値返してくれたら助かるのだけど、ハングなんで困ってます。
アドバイスいただけるとたすかります。

Strawberry perl 64bit 5.32.1
Windows10Pro 64bit version 2004
Corei3-4370, Memory 12G
934
(1): 2021/03/07(日)10:45 ID:Q92Mc+WL(1/4) AAS
安定して動かないならバグっている

だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある
forkがコケても動くような仕組みにすればok
935: 2021/03/07(日)10:50 ID:x9JK9zFw(1/2) AAS
そもそもWindows APIはfork()をサポートしてない。
936: 2021/03/07(日)11:48 ID:Anqe+9Rf(2/4) AAS
>>934 ありがとう。
メモリ使用量が低いと成功。
firefoxでもタブ1枚ぐらいなら成功。
firefoxでタブ(yahoo.com)10枚開くと、確実にハング。

ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。
WindowsOSがらみなので、イロイロありそうなのは察します。
でも、forkを呼び出したらハングして帰ってこないからなぁ。
コケるというよりは、forkを呼び出さない:
  if( $can_fork ) {fork;}
ってな書き方が必要になってしまう。
1-
あと 66 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.014s