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/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 用のキーボードで、半角の\ と同じ

半角の\ と見た目が同じでも、異なる文字コードの文字があるので、
それは使わないようにすべき!
2022/01/09(日) 19:38:34.71ID:C8vy8rqb
プログラムコードの中に全角文字を入れない
というだけで十分では?
2022/01/09(日) 20:41:20.51ID:G7UaEudb
そんな話はしていない。
アホなの?
66デフォルトの名無しさん
垢版 |
2022/01/09(日) 20:58:02.56ID:j/1ajBbY
運用でカバーできる…そんなふうに考えていた時期が俺にもありました
2022/01/10(月) 00:32:28.18ID:lVSGmVUf
おまいらの話がさっぱりわからん

もしかしておまいらの画面にはレス中の \ が \ と表示されてるのか?
2022/01/10(月) 00:32:56.45ID:lVSGmVUf
あーやっぱりそうかww
69デフォルトの名無しさん
垢版 |
2022/01/10(月) 00:57:25.51ID:av6tewvz
U+005C なのか U+00A5 なのかという問題
70デフォルトの名無しさん
垢版 |
2022/01/10(月) 01:03:42.10ID:av6tewvz
以前 Linux の端末で Perl のプログラムで改行として ¥n を入れたらそのまま画面に ¥n が出て来て驚いたことがあったが、
その時はキーボードの「¥」を押すと U+00A5 が入力されており「\」を押すと U+005C が入力されている状態だった。
もちろんキーボードの通りに端末画面に出る。

ま、しかし、これが本来あるべき姿だよな。
71デフォルトの名無しさん
垢版 |
2022/01/10(月) 01:06:59.43ID:9yjjKzLZ
お前ら安心しろ、PowerShellのエスケープ文字はバッククォート「`」だ
72デフォルトの名無しさん
垢版 |
2022/01/10(月) 18:57:32.72ID:iL7OUFIC
evalは使わない方がいいって聞いたけど
例外処理でeval使わない方がいいんですか?
それなら例外処理はどうすればいいんですか?
2022/01/10(月) 19:47:01.57ID:VCZFr+j9
>>72
文字列のevalは使うなという話やろ?
でなければ、そう言ったヤツに聞かんと。
74デフォルトの名無しさん
垢版 |
2022/01/10(月) 19:53:08.99ID:av6tewvz
セキュリティホールを作ってしまうかも知れないから使うなら気をつけて使えってことだろう。
特に外部から入力した文字列を元にしてevalに渡す文字列を作る場合な。
2022/01/12(水) 14:32:06.61ID:qWEJmmBb
>>70
Windowsだけが異常なだけなんでは?
俺は本来しか知らないよ
2022/01/12(水) 17:06:22.24ID:MDxnZ/Jq
>>75
そうなんだろうな。問題は、そこらじゅうにWindowsマシンがあるといこと。
サーバは Linux でも端末が Windows だとおかしい状態で表示されたりする。
(端末用のソフトやその設定次第ではあるが)
2022/01/12(水) 18:28:08.05ID:7zxmPeKt
>>75
遭遇頻度で言えば、Windows以外のほうがレアだけどな!
2022/01/26(水) 18:09:06.30ID:m/HfztEH
子飼弾がyoutubeやってるって聞いたんで見てみた
老害オヤジみたいになっててなんだかなあ
2022/02/16(水) 15:00:10.27ID:kgKTrVeV
2020年にPerl5.32あたりと同じ内容で2021までにはPerl7がリリース予定
目立った機能追加もないからさすがにリリース余裕だろうと思っとんだがあの話しどうなったの?
Perlコミュニティ機能してなくてそれすらなくなったとか?
2022/03/29(火) 03:26:40.85ID:d1B39DZ4
未だにperlでwebサイト作ってるとこあんの?
2chはperlらしいが
81デフォルトの名無しさん
垢版 |
2022/03/30(水) 15:15:52.21ID:eA8ci9y2
2chはC言語では?
違ったっけ?
2022/04/23(土) 16:12:18.71ID:07cLvGHn
ここにperl関係者いるかな? 連絡用のアカウント作るの面倒なんでここで報告。

perl5 で (?<name>\d{1}){0} がおかしい件
https://github.com/tonco-miyazawa/regex_etc/blob/master/MEMO_perl5/define_0times.txt

perlrecharclass.pod の誤植 - perldoc.jp
https://github.com/tonco-miyazawa/regex_etc/blob/master/MEMO_perl5/memo.txt
2022/04/24(日) 18:45:33.05ID:5imQEA1W
>>79
亀だが外から見えるまとまった発表はないな。Steering Council もそれに気付いたから近々ブログ記事も出すと言ってる
https://markmail.org/message/tqi446jfy42elhz5

まあ Perl 7 の変更点だった strict / warnings / feature 'signatures' のデフォルト有効化と
feature qw/indirect multidimentional bareword_filehandles/ のデフォルト無効化は use feature ':5.36' に全部入ったから use v5.36 すれば実質 Perl 7 だ
2022/08/11(木) 23:25:10.27ID:LJKUJJ+3
perlファイルに書かれている1行目の記述(#!/usr/local/bin/perl等)を変更せずに、
apacheでperlの参照先を変えたい(出来ればvirtualhost毎)のですが、やり方分かる方ませんか?
2022/08/11(木) 23:37:59.40ID:/k5aJ7yS
それOSの力を借りないと無理なのでは?ApacheやPerlの問題ではないと思うが。

自分で /usr/local/bin/perl というスクリプトを作ってしまってそこで切り替えるみたいな誤魔化しで良いなら楽だと思うが。
2022/08/14(日) 20:49:57.28ID:kr4fb0g+
>>85
OSはUbuntu 20.04.4 LTS を使っています。
何か方法はないでしょうか?
2022/08/14(日) 21:03:12.18ID:pSnWmvh5
shebangを無視してファイルを実行するようなApacheモジュールを組み込んだらできるかも?
そんなモジュールはきっと存在しないので、自作が前提だけど。w
2022/08/20(土) 02:15:42.15ID:GHxw2S4o
>>87
shebangを使って出来るか試して見ますね
89デフォルトの名無しさん
垢版 |
2022/08/23(火) 18:46:04.59ID:gaXbg1Nc
Perlに限った話じゃないんだが、WSL1でubuntu 22.04を使うとWSL1上でgzipバイナリが動かないせいで、tar.gz関連処理が軒並みエラーになってしまう
cpanでモジュールをダウンロードするとtar.gzの展開に失敗するのでなにもインストールできない
解決するには、gzipのソースをgnu公式からダウンロードしてビルド&インストールしてWSL1で動くgzipにパスが通るようにする必要がある
2022/08/24(水) 00:32:00.18ID:Ww6nM5wc
>>84
試してないが mod_actions 噛ませば良いんでない?

AddHandler my-perl-script .pl
AddHandler cgi-script .cgi
Action my-perl-script /cgi-bin/run-my-perl.cgi

とかやって run-my-perl.cgi は

#!/bin/sh
/path/to/your/perl $PATH_TRANSLATED

みたいな
91デフォルトの名無しさん
垢版 |
2022/08/25(木) 15:27:50.26ID:bJn+zm7R
宇宙刑事 shebang
92デフォルトの名無しさん
垢版 |
2022/08/26(金) 18:50:05.53ID:NQ4mbOjq
>>84
Would you like

#!/usr/bin/env perl
or
/your_favorite_perl_path perl_script
93デフォルトの名無しさん
垢版 |
2022/08/26(金) 20:12:41.13ID:fCaJRqVr
きまぐれでどれが呼ばれるか判らんものをよく使おうと思えるな
2022/08/26(金) 20:37:01.58ID:KXcMIUBJ
gzはwin同梱のtarには付いて無いんか?
2022/08/28(日) 05:40:04.80ID:vrDCS1ZD
>>94
PATH の通ったディレクトリに Windows 用の xz.exe を置いておくと tar の J オプションで展開してくれるようだが圧縮は対応していない模様。
圧縮は自分でパイプ通してやらないとできないみたい。何故そうなっているかは不明。
2022/08/28(日) 05:40:40.65ID:vrDCS1ZD
あ、gz か。ごめん。xz と間違えた。
2022/08/28(日) 05:42:29.29ID:vrDCS1ZD
あれ?でも gz (gzip) 圧縮なら tar cvfz でできたな。
98デフォルトの名無しさん
垢版 |
2022/12/23(金) 15:18:23.84ID:yhR2datD
perlに付属されているh2xsというツールを使ってモジュールを作成したいんですが、ディレクトリに移動に移動してコードを書く方法が分かりませんアドバイスお願いします。

※Perl
https://linuxcommand.net/perl-mod/#i-3
99デフォルトの名無しさん
垢版 |
2023/06/07(水) 16:24:29.96ID:ywJ2sk66
Perlのpackage内my変数についてちょっと疑問。
myはレキシカルな局所変数なので、他package内のmy変数は他のpackageからは参照できず、参照したければmy出なくourにすると解釈していたが。
packageが別々のソースファイルだった場合はその通りですっきりしたスコープ仕様だと思っていたが…
ところが二つのpackageが同じソースファイル内にあり、他のpackageのmy変数を参照すると変な感じ:


use strict;
use warnings;

package P1;
our $aa = __PACKAGE__.'aa';
my $bb = __PACKAGE__.'bb';

package P2;
print __PACKAGE__ . "(1)$P1::aa\n";
print __PACKAGE__ . "(2)$aa\n";
print __PACKAGE__ . "(3)$P1::bb\n";
print __PACKAGE__ . "(4)$bb\n";

実行結果
$ perl package_a_b.pl
Name "P1::bb" used only once: possible typo at package_a_b.pl line 14.
P2(1)P1aa
P2(2)P1aa
Use of uninitialized value $P1::bb in concatenation (.) or string at package_a_b.pl line 14.
P2(3)
P2(4)P1bb

P2からはP1のmy $bbが$bbで参照できて、$P1::bb だとエラー、なんだこりゃ…???
ちな 5.36.0 と 530.0 で確認した。
2023/06/07(水) 21:31:39.79ID:w5fTdC21
myはpackageとは何の関係もない
packageにmyのシンボルテーブルはない
だから(3)ではuninitialized value $P1::bbになる
(4)は単なる文字列
正常な振る舞いだよ
2023/06/07(水) 23:23:43.75ID:ywJ2sk66
>>100
回答ありがとう、myがそういうものだと今日まで知らずにいた…おrz
2023/06/08(木) 00:48:41.98ID:ZzDLFGD7
myのスコープはブロック、ファイル、evalの3つ
パッケージとは無関係だから>>99ではファイルスコープになるね
package P2でもう一度my $bb宣言したらエラーになることからも分かる
103デフォルトの名無しさん
垢版 |
2024/02/23(金) 07:50:24.93ID:3WpPBYhb
あげ
104デフォルトの名無しさん
垢版 |
2024/04/14(日) 21:35:03.76ID:byNUCOGR
ローカルサーバーでsrandとrandで生成した乱数の値と
レンタルサーバーでsrandとrandで生成した乱数の値が違うのは何で?
どちらもsrandの値は同じとする。
2024/04/15(月) 00:21:17.88ID:9X9lvy+w
このへんから探ってみては
https://github.com/search?q=repo%3APerl%2Fperl5+rand&type=code

煽りじゃないよ しんどいので俺はここまで
2024/04/15(月) 12:41:15.37ID:cLz3iDP/
プラットフォームのifdefで切り分けてそうだからそれっぽいマクロ定数でも探すといいかも
2024/04/15(月) 17:29:37.18ID:UgC/I+2W
ビルドされた環境のCライブラリ依存じゃない?
同じにしたいならMath::Random::MTとか使えばいいんでね
2024/04/16(火) 09:32:57.50ID:Fr3sHPgG
>>104
一般論としてPerlの内部実装は無保証でコロッコロ変わるので、疑似乱数の再現性を担保したいならコードを同梱してしまうのが最も確実

cでたったこれだけ、Perlで詰めれば20行も要らんだろう、局所使用ならファイル内subでいいレベル
github.com/bmurray7/mersenne-twister-examples/blob/master/c-mersenne-twister.c

同階層にpl版もある
丁寧にコードされパッケ化で無意味に冗長なので参考ならこっち
アルゴリズム特許あるか知らんし、ライセンスを許容するなら同梱
2024/04/16(火) 14:14:10.10ID:ipSHedtl
print"A\n",print"B\n";

これの動き教えてくれよ
出来ればサンプルソースも
2024/04/16(火) 15:16:06.51ID:UEoqQOMp
print "A\n", print "B\n";
print("A\n", print("B\n"));
まず最初のprintの引数中のprint("B\n")が評価され"B\n"が出力される
print("B\n")が成功したので真の値1を帰す
print("A\n", 1)となる

B
A
1と表示される

print "X\n", 3 > 0;
print "X\n", 3 < 0;
print "X\n", open(my $fh, "no_such_file.txt");
2024/04/16(火) 15:37:42.78ID:E/T1RXIg
成る程、() 使わない副作用意識しないとダメですね
ありがとうございます
2024/11/17(日) 20:01:50.35ID:w8x6IOGf
poetryと同等の仕組みがないときつい
2025/11/10(月) 07:57:26.71ID:FhsKmzpk
2025年最後の書き込みになるかもしれないから書いておこう
114デフォルトの名無しさん
垢版 |
2025/11/16(日) 00:05:37.18ID:TywOlYcs
いや、この書き込みが2025年最後だ

という書き込みが延々と続いたりして
レスを投稿する

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

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