【古典的モダン】Perlについての質問箱 51箱目

■ このスレッドは過去ログ倉庫に格納されています
2021/05/26(水) 10:55:29.83ID:+WmbAELr
かつて一斉を風靡したPerlについての当時のモダンな質問をするための質問箱です。

【一つ前のスレのテンプレ】当時の状況を鑑みまた芸術作品であることに配慮して原文のままとした。

【モダン推奨】Perlについての質問箱 50箱目

CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )

回答する際はモダンな方法でお願いします
(例 jcode.plではなくEncodeモジュールを使った方法)
理由はもう2012年です。いい加減2000年以前の方法はやめましょう。
最新のPerlを使うほうがかっこいいです。
いつまで勉強しないつもりですか?
過去にとらわれるのはもうやめです。進歩しませんよ。

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

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

http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2

▼ 前スレ
Perlについての質問箱 49箱目
http://toro.2ch.net/test/read.cgi/tech/1319953460/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り
2021/07/24(土) 15:05:42.54ID:4z9np1w1
>>130
そこはシェルとかPHPもあるからそんなに問題ではないと思うけどな
文字列に変数埋め込みの時にもそのままかける利点もある
変数を視認しやすいから読む時はかなり便利だよ
2021/07/24(土) 18:15:48.35ID:PhK5xXRL
予約語を区別しなくてよい利点も。

Cとかで予約語を識別子として書くとわけのわからないエラーになりがち。
シェルは逆に、組み込み変数が多すぎて混乱することもある。
Perlはほどほどでいい落としどころ。
2021/07/24(土) 18:32:18.88ID:/ZN/8jbh
どう見ても予約語なものを変数名にして、
それはそれで動くけどエディタが間違って色を付ける
2021/07/24(土) 20:03:42.01ID:6vSsav6r
>>133
それはエディタが悪い
2021/07/24(土) 20:10:49.65ID:/ZN/8jbh
正規表現の色付けもよく間違う
2021/07/30(金) 18:20:35.62ID:7AkGA5GJ
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?
2021/07/30(金) 19:00:06.70ID:eS54QcXE
httpsでいきなり躓くので、新しい言語の方がいいのでは
2021/07/30(金) 22:05:38.04ID:e1ZnWCW5
>>136
ほぼ禁止してると思うよ
2021/08/31(火) 19:26:38.99ID:MCrZ+tU7
threads->create しながら detach しながら、
前のスレッドがdetachするちょっと前に次のスレッドを作って、
基本的には1つしか動いてない

みたいな動作のまま放置すると、そのうちスレッドの作成に失敗するようになる
オーバーラップさせようとしている期間だけ失敗して、前のスレッドが無くなると成功する
そのままさらに放置すると、スレッドが全く作成できなくなる

何かが溜まっていって上限に達してるように見えるけど、何か制約ある?
2021/10/27(水) 12:06:56.11ID:DyIbl0xH
%hash = { key => value };
みたいに書いてエラーになる原因は絶対pythonだ
2021/11/02(火) 20:15:13.69ID:U4IKz2Wy
それって参照ですよね?
2021/11/02(火) 20:54:35.41ID:xUGStZM6
ハッシュにリファレンスを入れるとどうやって使うんだ?
別にエラーにはならないんだよな
2021/11/03(水) 16:03:42.69ID:554LNcID
>>142
use warnings プラグマ指定されてると、Reference found where even-sized list expected at XXX.pl line YYY. みたいな警告が出るけど
2021/12/07(火) 17:41:22.93ID:Jl0mhXXA
$item = $item[$i];

みたいな書き方してると、移植する時に困るな
2021/12/07(火) 21:30:11.79ID:T0uVfeKL
@itemsやね
2021/12/07(火) 21:39:19.02ID:Jl0mhXXA
さらに$item{$key}もいる
2021/12/08(水) 02:33:21.38ID:gZ1PVCfG
$item = $items[$i];

とか

foreach my $item (@items){

はよく見る。
2021/12/08(水) 08:57:19.95ID:5HATgl/c
$item{$key}だと思ったら、$item->{$key}で、
うっかり$itemも使って書き換える、というのが自分のバグ原因1位
149デフォルトの名無しさん
垢版 |
2022/01/03(月) 14:11:28.15ID:dazlCfaS
0〜9と+-以外の文字が含まれている場合は入力制限としたい場合

my $data = "-23456";
if($data =~ /[^0-9+-]/){
print "入力制限";
}
とやっても入力制限になってしまいます
どうやればいいんですか?
150デフォルトの名無しさん
垢版 |
2022/01/03(月) 14:28:13.30ID:dazlCfaS
149だけどこれでよかったです。
解決しました
2022/01/04(火) 00:39:15.19ID:A3JfSOSv
マイナス記号ってさ、 [] の中だと a-z と書いて a から z の意味にしてたりするじゃない。だから \- にしといた方が良いんだよ。
その例のように最後に使うなら大丈夫だろうけどね。

プラス記号に関しては [] の中だと任意の1文字の意味は消えてるように思うけど念のため \+ にしといた方が良いような気がする。(調べてない)
2022/01/04(火) 00:46:20.99ID:4cEZtgLZ
難しいこと考えず記号を全部エスケープしときゃいいんだよ
へたに救済ルールがあるせいで混乱する
2022/01/04(火) 14:31:56.40ID:3tVRYKmq
チェッカーにかけるとエスケープしなくていいものをエスケープしてると指摘される
2022/01/04(火) 15:57:51.97ID:GepGyN7D
Perlに慣れすぎると、Sedとかで事故りがち。
2022/02/12(土) 12:48:37.74ID:93miCQ0j
sedに戻る必要とかあるの?
2022/02/12(土) 23:03:57.39ID:0bMK8p7w
あるときもある。
2022/02/13(日) 00:17:15.83ID:zkxSitr3
最新言語から見ればsedもperlも同じ
2022/02/13(日) 11:34:49.61ID:WhYN9s0d
sed使うときは-Eオプション使うとマシになるよ
grepなんか-Pオプションなんてあるし
2022/02/13(日) 11:42:02.90ID:zkxSitr3
grepは今でも普通に使う
perlより圧倒的に速い
160デフォルトの名無しさん
垢版 |
2022/02/13(日) 12:48:15.74ID:4VAZuwGn
MINGW版のgrepは-Pオプション使えないんだよなあ
2022/02/14(月) 18:49:00.35ID:kp1rSO4P
うちのは使えるみたいだな

$ grep --version
GNU grep 2.5.4

Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


$ grep --help | egrep '(-P|-o)'
-P, --perl-regexp PATTERN is a Perl regular expression
-b, --byte-offset print the byte offset with output lines
-o, --only-matching show only the part of a line matching PATTERN
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)

$ uname
MINGW32_NT-6.2
2022/02/14(月) 19:43:31.51ID:SjaA8f+R
'grep' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
163160
垢版 |
2022/02/14(月) 20:21:12.04ID:xbNILGkv
MINGWではなくGit for Windows 2.35.1.2のMSYSに訂正
C:\Program Files\Git\usr\binにPATHを通している
>uname
MSYS_NT-10.0-19041

>grep --version
grep (GNU grep) 3.0
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>;.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>;.

>grep -P foo
/usr/bin/grep: -P supports only unibyte and UTF-8 locales

以下、Chocolateyのgrepの場合

>grep --version
grep.exe (GNU grep) 3.7
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>;.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others; see
<https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>;.
Patched by: Michael M. Builov <mbuilov@gmail.com>.

>grep -P foo
grep.exe: Perl matching not supported in a --disable-perl-regexp build
164160
垢版 |
2022/02/14(月) 20:33:42.00ID:xbNILGkv
失礼
環境変数に LC_CTYPE=ja_JP.UTF-8がセットされてなかっただけらしい
165160
垢版 |
2022/02/14(月) 20:39:16.14ID:xbNILGkv
Chocolateyのgrepは環境変数に LC_CTYPE=ja_JP.UTF-8がセットされててもダメ
grep --helpコマンドで-Pオプション表示されるけど実際には使えない
2022/02/14(月) 22:36:54.77ID:CumnTUFy
Git for Windowsのgrepはおまけみたいなもんやろ。
しゃあない。

Git以外も使うんならMSYS2にするべき。
2022/02/14(月) 22:38:38.84ID:SjaA8f+R
WSLでいい
2022/02/15(火) 08:43:15.81ID:5Cl7umfN
というかwinならsls使えるんでは
2022/02/15(火) 09:33:33.33ID:CMc47lH5
部分マッチ情報とか付いた$_が任意のコードブロックに渡せるし普通にgrepより強い、perlっぽいし

ただし内部コマンドなのが玉に瑕
bashとかの非標準シェルを使ってるとpwsh -cにパイプや引数で渡す必要があるし、$_等のシェル変数使うから後で参照できねえ
2022/02/15(火) 12:43:38.51ID:LH9Iimee
WSL2, Ubuntu 18.04 では、

grep --version
grep (GNU grep) 3.1

-P, --perl-regexp

PATTERN を Perl の正規表現として扱います。
きわめて実験的なものなので、
grep -P を使うと、その機能は実装されていません、という警告が出るかもしれません
2022/02/15(火) 14:44:11.29ID:ch4uHJq0
windows版だけの問題なのか?
gnu grepの-Pはもう少なくとも十年以上その表記
そもそもundocumentedだが、サブパターンのネスト、バックトラック切り、アサーション周りが怪しい

windows使ってるなら標準コマンドのselect-stringを使え
(?>)(?<=)(?<!)(?=)等表記も標準的

-r相当のオプションは無いけどgciがfind同等のコマンドだからパイプするのがイディオム(未テスト)

> get-childitem /some/where -recurse -depth 1 |select-string [-opts] "pat"

windowsでbash使ってるなら多分こんな感じになるだろう
bash$ perl -E 'say "@INC"; ' |pwsh -c '
$input -split " " |gci -r -d 1 -inc "*.pod" -exc "*delta*" |sls "^=head NAME"
'
汚なくて嫌ならperlを使え、そのためのPerlだ
2022/02/15(火) 14:49:23.52ID:ch4uHJq0
あ、最後のslsに -contextが抜けてた
sls -con 2 "..."でname - descrを表示する意図だった、念の為
2022/02/15(火) 15:05:25.32ID:RAmS19mH
ずいぶんエラソーですね
2022/02/16(水) 03:32:34.88ID:Mkae6rZq
誰だか何となくワカタ
2022/02/16(水) 08:25:04.50ID:Kby4UhL4
ワロw
2022/02/23(水) 22:59:01.37ID:VOimcA5h
薄めのORMない?小さめのスクリプトにはDBICいくらなんでも重すぎる
2022/02/26(土) 11:08:00.76ID:0iPdwkze
Teng
2022/05/16(月) 21:11:45.65ID:XzOAdinb
あげ
2022/05/18(水) 23:59:05.74ID:Tv2EzwC/
未だにpythonで
push array, value
とか書いてエラーになる
正しくは
array.append(value)

どうにも窮屈だな
2022/05/19(木) 01:14:38.83ID:fIfBGhTn
push = lambda a,v: a.append(v)
2022/05/19(木) 01:18:01.10ID:fIfBGhTn
lambdaに名付けるとリンタに怒られるんだっけか
push = list.append
push (array, value)
が多分真っ当でたぶん動く
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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