Perlについての質問箱 65箱目

1デフォルトの名無しさん
垢版 |
2021/03/27(土) 23:52:13.17ID:vQS/WYw3
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: https://medaka.5ch.net/php/

このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。

"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

www.perl.org/get.html
Download Latest Stable Source (5.32.1)

▼前スレ
Perlについての質問箱 62箱目
http://toro.5ch.net/test/read.cgi/tech/1385039352/
Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/
Perlについての質問箱 64箱目
https://mevius.5ch.net/test/read.cgi/tech/1548981877/
2021/03/27(土) 23:54:34.17ID:vQS/WYw3
2以降テンプレNGワードで貼れず。
見たい人は前スレ参照してくださいな。
3デフォルトの名無しさん
垢版 |
2021/04/29(木) 02:22:04.28ID:vjsl7cGC
LinuxやmacOSのperlは、Term::ReadLineの $term->readline() で日本語などのマルチバイト文字の入力結果が文字化けしてしまうが、
cpanなどを使ってTerm::ReadLine::Gnuをインストールすることで回避できる
Linuxの場合はTerm::ReadLine::Gnuをビルドするためにlibreadline-devも必要になる
2021/04/29(木) 14:16:29.56ID:gAM2tnQs
ttps://blog.outer-inside.net/2021/03/perl-5.34-delta.html
2021/04/29(木) 23:41:19.05ID:YN7Pg05+
CentOS7 だと yum install perl-Term-ReadLine-Gnu でインストールできたよ。
RPM使ってるOSはこれで行けるのではないかな。
2021/04/29(木) 23:47:16.34ID:YN7Pg05+
インストールすると perl -d でのデバッグ時も Ctrl+P だの Ctrl+N だの矢印キーだの使えるようになっていいね。
7デフォルトの名無しさん
垢版 |
2021/04/29(木) 23:58:36.30ID:YN7Pg05+
Ubuntu だとこれでインストールできた。Debian 系はこれでできそう。
sudo apt install libterm-readline-gnu-perl
8デフォルトの名無しさん
垢版 |
2021/05/23(日) 06:37:34.25ID:8ydzk+Rl
perl 5.34.0 がmacOSのhomebrewにきたけど、cpanがなんか変
9デフォルトの名無しさん
垢版 |
2021/05/23(日) 06:43:35.02ID:8ydzk+Rl
cpanだけじゃなくてperldocもだった
perl5.34.0ではなくmacOSに最初から入っている古いバージョンのperlを呼び出してしまうようだ
自力で回避するには古いperlが呼ばれないようにスクリプトを書き換えるなどの作業が必要
10デフォルトの名無しさん
垢版 |
2021/07/06(火) 11:11:57.65ID:yWww0KpQ
PerlスクリプトをVSCodeで対話デバッグするにはどうしたらいいですか?
2021/07/07(水) 01:34:33.25ID:bUHYGk47
例えば、Ruby では、p, pp を付けてオブジェクトの内容を確認できるので、デバッグまではしない。
Break Point で止めたり、デバッグしたいのなら、誰かが作った拡張機能を探す

require "csv"

input_str = <<"EOT"
-0.0,1.2.3
9..9,-0
EOT

csv = CSV.new( input_str )
csv.convert( :numeric ) # 数値型へ変換する

line_num = 0 # 行番号

csv.each do |row|
line_num += 1
p [ line_num, row[ 0 ].class, row[ 1 ].class ]
end

出力
[1, Float, String]
[2, String, Integer]

つまり、1.2.3, 9..9 は、型変換に失敗して、文字列のまま
2021/07/07(水) 03:43:38.09ID:XEShr1cy
>>11
情報量ぜろ!w
13デフォルトの名無しさん
垢版 |
2021/07/08(木) 01:00:53.27ID:gY+tXenb
>>11
死ね
14デフォルトの名無しさん
垢版 |
2021/07/08(木) 10:49:11.06ID:nEG9xKCJ
uby厨は死んで良いが
perlもいい加減やめた方がいい言語
新規で使うなんてあり得ない
2021/07/08(木) 15:43:39.51ID:PzoSTOmc
Perlは「可読性?何それうまいの」的なノリでやる自分の作業用として重宝する
2021/07/10(土) 14:27:06.61ID:jbIVp5r2
小規模な一次的に使うツールみたいなのは今でも新規で作ることあるけどね
シェルスクリプトで書くと余計にぐちゃぐちゃで分かり辛くなったり遅くなりそうな場合とか
2021/08/18(水) 18:30:37.25ID:VDhd+cn2
元々 awk や sed 駆使したシェル芸を代替するためのコマンドだから本来の地位に戻っただけとも言える

ディレクトリ掘って依存設定ファイル作らないとモジュールのインストールもできない JavaScript とか Go と違って cpanm で必要なモジュール放り込めばファイル一個で雑に動くからやっつけ仕事には未だによく使う
2021/08/18(水) 19:15:57.96ID:bMnOTwac
褒めてんだかけなしてるんだか
2021/08/18(水) 20:46:15.60ID:8PJNJj34
ダクトテープがダクトテープとしてよく働いてくれる、というのは最高の賛辞やろ。
キレイなことだけが誉め言葉ではない。
2021/08/18(水) 21:14:05.44ID:nwD63Gpn
Perlはホワイトハッカー御用達の言語でしょ
2021/08/21(土) 00:23:42.38ID:Zmo3uqZM
あらまオレ様はホワイトハッカーだったの?
2021/08/21(土) 05:16:45.58ID:dH+vFBpp
黒ぃハッカー
23デフォルトの名無しさん
垢版 |
2021/09/12(日) 04:25:38.35ID:RfonpbSj
MediawikiのXMLをパースするプログラムを書いてるんですが、
人間が日常的に使っている[[自然言語]]を[[コンピュータ]]に処理させる一連の技術であり
という文章は[[]]内の文字を<a href>タグで置換することはできたのですが、

応用例としては[[入力予測|予測変換]]、[[インプット メソッド エディタ|IME]]などの文字変換が挙げられる。
このように[[*1|*2]]と2重に入っている文字列の置換がどうしてもうまくいきません。
この場合は、<a href=*2>*2</a>と置換したいのですが、どうしたらいいでしょうか?
24デフォルトの名無しさん
垢版 |
2021/09/12(日) 05:49:55.32ID:zHKafq1A
s/[[(.*?(|(`*?))]]/$3 ? $3 : $1/ge
かな?試してないけど。
25デフォルトの名無しさん
垢版 |
2021/09/12(日) 05:51:13.73ID:zHKafq1A
あ、ごめん。| の所は \| ね。
26デフォルトの名無しさん
垢版 |
2021/09/12(日) 05:52:45.30ID:zHKafq1A
[と]も直前に\要るね。
2021/09/12(日) 07:06:52.84ID:jZMYjdNi
なぜ、Perl のXML パーサーを使わないの?

例えばRuby なら、Nokogiri と言う、HTML/XML パーサーがある。
内部的には、Libxml2 モジュールを使っているのかな?

たぶん、Perlにもあるはず
2021/09/12(日) 15:32:25.57ID:89s8PaYB
パースするのがXMLじゃないからだな。
29デフォルトの名無しさん
垢版 |
2021/09/13(月) 10:13:09.30ID:E86z1ItW
s/\[\[(.*?(\|(`*?)))\]\]/$3 ? $3 : $1/ge
のパターンで試してみましたが、結果は「インプット メソッド エディタ|IME」
と置換されてしまいます。
(.*?)の部分で、|以降の文字列も含めてマッチングされているようで
それ以降のパターンマッチが効いてないようです。
2021/09/13(月) 10:38:07.93ID:AXNI3otr
このへんで確認しろ。https://qiita.com/aqril_1132/items/c185c7ad84c129e5a2df
2021/09/13(月) 23:15:02.86ID:vef3NqnY
strawberry perl が34をリリースしないのはなぜだ
2021/09/15(水) 19:04:24.79ID:fHmj5hYp
スクレイピングすると地獄へ落ちるって本当ですか?
2021/09/15(水) 23:51:59.00ID:3vtMVT28
落ちたり落ちなかったり
34デフォルトの名無しさん
垢版 |
2021/09/15(水) 23:54:27.28ID:3vtMVT28
>>29
それ . が ` になってるよ。直してやってみたらちゃんとできたよ。

$ echo '[[インプット メソッド エディタ|IME]]' | perl -pe 's/\[\[(.*?(\|(.*?)))\]\]/$3 ? $3 : $1/ge'
IME
$
2021/09/18(土) 03:37:45.50ID:YPBxfQEw
スクレイピングの勉強するのですが、下手するとF5アタックになるとかの法的リスクと回避法を重視している入門書ってありますか?
今の所やりたいことは、特定の市町村の5年分気温気象データを収集して自分用に加工
近所のコインランドリーの稼働データを集計して空いてる確率が高い時間帯を調べるの2つです
前者は膨大なデータを取得する必要があります
後者は10分から20分おきにアクセスすることになります
2021/09/18(土) 03:45:17.73ID:VuuEM7MI
まるぽ
2021/09/18(土) 18:17:05.22ID:J85RgKD5
頭のおかしい人に以下のようなことを言われました

>>基本、スクレイピングは営業妨害との戦い。
>>どの本にも、そう書いてある。
>>スクレイピングを推奨する本はない

具体的な書籍名を教えてください


>>5ch は、マルチポスト禁止!
>>同じ質問を、複数のスレや外部のサイトに書いてはいけない

どこでそんなルールが決まっているのでしょうか?
2021/10/02(土) 06:38:43.82ID:b+9bP+Kg
socketでデータを受信すると、
データの途中に「残りバイト数」が挿入されてしまうことがあるんだけど、これはどう取り除けばいいの?
例えばこんな感じになる
wtjjpodjtjtjaajjgjjaatwdjjg@gptjwttdmttjmttpwm'jajt
1f
1234567890123456789012345678901
残りバイト数(1f)を16進数で表した文字列が挿入されてる
元々こういうデータだった場合と、挿入されてこうなった場合の区別が付かない
readline()でもread()でも結果は同じだった
2021/10/02(土) 14:54:42.04ID:lWVjrMOX
>>38
なにそれ?文字で挿入されるの?そんなの初めて聞いたなあ。送る側で入れてるだけなのでは?(そうでなければ呼んでるライブラリが何かおかしいか)

socket 関係はバッファリング避けるために sysread() 使った方が良い場合があるよ。
select で入力待ちをした後で読み込みとかね。
後は気を付けるとしたらノンブロッキングにしてるかどうかかな。
40デフォルトの名無しさん
垢版 |
2021/10/03(日) 14:58:34.95ID:ngVDhrCg
activeperlからStrawberryperlへ移行を検討しているのですが、
activeperlで使用しているモジュール( Win32::EventLog::Message)が
cpanから削除されておりbackpanには残っていました。
https://cpan.metacpan.org/authors/id/D/DA/DAVEROTH/
上記から、Win32-EventLog-Message.tar.gzはダウンロードできたのですが、
当方perl初心者でStrawberryperlへのインストール方法がわからず困っております。
どなたかインストール方法についてご教授お願い致します
4138
垢版 |
2021/10/03(日) 15:42:34.37ID:Etawdk1b
お騒がせしました
Transfer-Encording: chunked
ってやつだった
これかどうかを確認して別処理か…面倒くさあい
42デフォルトの名無しさん
垢版 |
2021/10/03(日) 20:15:27.91ID:s9ykO0bu
>>40
マジレスするとperlを捨てるチャンス
2021/10/03(日) 20:18:20.58ID:prztZm/y
>>42
そのかわりに何を勧めんの?
Windowsのイベントログを扱いたいヤツに。
44デフォルトの名無しさん
垢版 |
2021/10/03(日) 22:00:09.32ID:ngVDhrCg
40です。
通常Makefile.PLでインストールするようなのですが、
上記tar.gzには、Makefile.PLがなく、
Message.pmがあるのですが、
これは、strawberryperlにはインストールできないのでしょうか?
2021/10/03(日) 22:14:43.18ID:BlQUkwCi
できるかどうか自分で試すしかない
他人にやってもらおうってのは虫が良すぎ
2021/10/21(木) 12:31:10.82ID:gLUi04Um
my $str = "<img src=\"./test1.png\" style=\"width:100px;height:100px\">";
./test1.pngの部分を./test2.pngに置換するにはどうやればいいんですか?

my $str =~ s/test1.png/test2.png/g;というのじゃなくてtest1.pngの部分がどんな
画像URLでも置換できるように
2021/10/21(木) 12:49:12.67ID:hpQkeFJy
test2.pngを変数にすればいいだけ
2021/10/21(木) 12:53:02.13ID:gLUi04Um
いやそうじゃなくて正規表現使ったやつで
2021/10/21(木) 13:11:31.93ID:hpQkeFJy
s/src=".+?"/src="test2.png"/
2021/11/08(月) 18:04:06.58ID:H7HFgRE2
{a}ab{abc}
{}で囲まれたaだけdに置き換えたい
どうやればいいんですか?

{d}ab{dbc}になればいいってこと
2021/11/08(月) 18:59:06.40ID:JELTvgr2
それだけじゃ分かんない
全ての条件を書かないと
それが解なんだけどね
2021/11/08(月) 22:10:38.33ID:H7HFgRE2
本当にやりたいのは
my $line = "<img&#160;src='aaa.png'&#160;width='300'&#160;height='200'>&#160;画像説明";
<>の中にある全ての&#160;を半角スペースに置き換えたいっす

実行結果は<img src='aaa.png' width='300' height='200'>&#160;画像説明となればいいっす

送信したときブラウザが勝手に半角スペースを&#160;に変換しちゃうみたいなのでタグ内の半角スペースだけ元に戻したいから
2021/11/09(火) 00:02:06.84ID:J0R6dl97
sub f {
my $s = shift;
$s =~ s/ / /g;
return "<$s>";
}

$line =~ s/<(.+?)>/f($1)/eg;
2021/11/09(火) 00:03:21.78ID:J0R6dl97
sub f {
my $s = shift;
$s =~ s/&#160;/ /g;
return "<$s>";
}

$line =~ s/<(.+?)>/f($1)/eg;
2021/11/09(火) 00:36:22.21ID:bwlPyLJQ
ありがとうございました
2022/01/06(木) 18:30:59.16ID:LRBDWWjE
printで出力すると/nで改行できません
二重引用符で括ってもできません
なにをやっても/nがそのまま表示されます
調べても二重引用符で括れとか〈br〉とかしか出てきません
2022/01/06(木) 18:45:34.18ID:qZej6RdN
スラッシュnは改行じゃないからな
2022/01/06(木) 20:07:08.37ID:HyMw34ze
斬新な質問だ。w
斜めの縦棒を日本語キーボードで入力しろ、と言われたらたしかにそうなるかもだが。
59デフォルトの名無しさん
垢版 |
2022/01/07(金) 00:42:46.84ID:+rjvm48j
>>56
\n でやってみな。
60デフォルトの名無しさん
垢版 |
2022/01/07(金) 00:45:13.42ID:+rjvm48j
>>58
やはり \ (\x5c) の歴史的な事情を知らないと分からないのだろうな。
6156
垢版 |
2022/01/07(金) 18:30:12.92ID:j8/UZCr2
¥マークを\に変えたらできました
紛らわしいもんですね
62デフォルトの名無しさん
垢版 |
2022/01/08(土) 10:43:35.54ID:mAjXIrhA
そう。紛らわしいんだ。
2022/01/08(土) 23:05:04.70ID:Df3tzX0P
逆スラッシュは、日本語・Windows 用のキーボードで、半角の\ と同じ

半角の\ と見た目が同じでも、異なる文字コードの文字があるので、
それは使わないようにすべき!
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況