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.28.1)
▼前スレ
Perlについての質問箱 61箱目
http://toro.5ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.5ch.net/test/read.cgi/tech/1385039352/
Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/
探検
Perlについての質問箱 64箱目
■ このスレッドは過去ログ倉庫に格納されています
2019/02/01(金) 09:44:37.18ID:1/Kr4Qjk
2019/06/14(金) 23:12:24.97ID:oN4k2Se6
>>71
読んだけど、実際にはタイトルほどPythonを悪くいってないな。w
読んだけど、実際にはタイトルほどPythonを悪くいってないな。w
2019/06/16(日) 10:31:31.41ID:Q48cejx2
windowsでreaddirするとcp932で読めてくる
それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?
それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?
2019/06/16(日) 14:26:37.09ID:bI4lsVP6
2019/06/28(金) 03:27:32.11ID:yOZUOG90
perltidy -pbp -nola perl_file
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが
sub {
:LABEL
for ....................
のようなラベルが本の通りにならない。たとえば 103ページなど
ラベル調整を諦めて -nola をつけ、手動で正しくすることにした
これバグだよな?
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが
sub {
:LABEL
for ....................
のようなラベルが本の通りにならない。たとえば 103ページなど
ラベル調整を諦めて -nola をつけ、手動で正しくすることにした
これバグだよな?
76バグもういっこ
2019/06/28(金) 03:37:53.64ID:yOZUOG902019/06/28(金) 05:48:53.09ID:MYNfkfjj
何語?
2019/06/28(金) 14:53:22.61ID:oMWPNRS2
perl にインデントを求めるな。
2019/06/29(土) 00:24:21.75ID:YzN8MsSb
\(^o^)/
2019/06/29(土) 05:53:24.17ID:3U68S2mZ
どうでもインデント
2019/06/29(土) 15:13:13.34ID:3U68S2mZ
sjisでローマ数字のUが書いてあるのをutf8にすると、どうやっても化けるな
2019/06/29(土) 15:18:34.74ID:3U68S2mZ
一旦生で読んでcp932でデコードすればいいのか
LWP:Simpleだとそのへんに手が出せない
LWP:Simpleだとそのへんに手が出せない
2019/06/29(土) 17:02:36.85ID:o1VtcfU0
MySQLもそうだけど、sjisは使っちゃイカンやろ。
細かいところで文字の置き換えルールがメチャクチャだったような。
いわゆるシフトJISはとにかくcp932で。
細かいところで文字の置き換えルールがメチャクチャだったような。
いわゆるシフトJISはとにかくcp932で。
2019/06/29(土) 17:53:32.74ID:3U68S2mZ
多分htmlに俺はsjisだと書いてあると、LWPが勝手にsjisでデコードするんだろう
2019/07/06(土) 10:10:18.37ID:oMEfEQKE
元がeuc-jpだと、
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな
86デフォルトの名無しさん
2019/07/12(金) 02:22:50.96ID:AjCqo1Mf 下記のコードですがダブルクォートを介さずに$testから'フ'を表示させる方法はありますか?
#!/bin/env perl
use strict;
use warnings;
use utf8;
my $test = '\xE3\x83\x95';
my $test2 = "\xE3\x83\x95";
print "$test\n\n";
print "$test2\n\n";
#!/bin/env perl
use strict;
use warnings;
use utf8;
my $test = '\xE3\x83\x95';
my $test2 = "\xE3\x83\x95";
print "$test\n\n";
print "$test2\n\n";
2019/07/12(金) 02:35:11.65ID:gPQuYcbX
my $test3 = $test;
$test3 =~ s/\\x([0-9A-Fa-f]{2})/pack('H2', $1)/eg;
print "$test3\n";
$test3 =~ s/\\x([0-9A-Fa-f]{2})/pack('H2', $1)/eg;
print "$test3\n";
2019/07/12(金) 04:04:28.94ID:yXcDIkyu
print eval qq/"$test\n\n"/;
8986
2019/07/12(金) 07:58:26.24ID:AjCqo1Mf ありがとうございます!
2019/08/11(日) 05:06:35.55ID:GTeyRs5o
こんな書きかたあったか?
DB<27> printf "%s\n", ('Fizz')[$_%3] . ('Buzz')[$_%5] || $_ for (1..15)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
()[]が見おぼえがない
DB<27> printf "%s\n", ('Fizz')[$_%3] . ('Buzz')[$_%5] || $_ for (1..15)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
()[]が見おぼえがない
2019/08/11(日) 05:17:44.88ID:GTeyRs5o
()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか
2019/08/11(日) 05:42:32.38ID:GTeyRs5o
DB<25> print "$_ cup", ("s")[$_ < 2] , " of coffee\n" for (1..3)
1 cup of coffee
2 cups of coffee
3 cups of coffee
1 cup of coffee
2 cups of coffee
3 cups of coffee
2019/08/11(日) 10:17:48.54ID:GTeyRs5o
DB<23> printf "%s\n", "$_ cup" . ("s")x!!($_ != 1) . " of coffee" for (0..3)
0 cups of coffee
1 cup of coffee
2 cups of coffee
3 cups of coffee
DB<24> printf "%s\n", "$_ butterfl" . ("y","ies")[($_ != 1)] for (0..3)
0 butterflies
1 butterfly
2 butterflies
3 butterflies
0 cups of coffee
1 cup of coffee
2 cups of coffee
3 cups of coffee
DB<24> printf "%s\n", "$_ butterfl" . ("y","ies")[($_ != 1)] for (0..3)
0 butterflies
1 butterfly
2 butterflies
3 butterflies
2019/08/12(月) 10:00:54.45ID:1t9yEA1l
今はもう (1)[1] が空リストにならないんだな。perl5220delta に書いてあった。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。
2019/08/12(月) 10:16:24.43ID:BBJuWfXI
undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな
初期化されてないものを使うのが気持ち悪いと感じるのは、
auto変数が本当に領域確保するだけだった頃の名残り
厳密に仕様化して積極的に使うべきだよな
初期化されてないものを使うのが気持ち悪いと感じるのは、
auto変数が本当に領域確保するだけだった頃の名残り
2019/09/14(土) 11:56:42.38ID:MMNKizJk
簡単なシェルスクリプトしか書けない素人ですがPerlの利点ってどこです?
grep -Pやperl -peで世話にはなっていますが目当てはあくまで正規表現だけですし
比較演算子はbashと逆だし変数は記号で使い分けなきゃならんしなんだこいつってなって
grep -Pやperl -peで世話にはなっていますが目当てはあくまで正規表現だけですし
比較演算子はbashと逆だし変数は記号で使い分けなきゃならんしなんだこいつってなって
2019/09/14(土) 12:00:19.76ID:JUmWdv2U
どこでも使える
2019/09/14(土) 23:46:33.57ID:n7pzU9md
テキスト処理に特化されているところ
そのおかげで "," や " " とかの部分を q(,) q( ) などと書けたり
perl コードが正規表現と一体化していて再帰も扱えたりなど色々あるが
全部特化したことによる利点
そのおかげで "," や " " とかの部分を q(,) q( ) などと書けたり
perl コードが正規表現と一体化していて再帰も扱えたりなど色々あるが
全部特化したことによる利点
2019/09/14(土) 23:58:57.25ID:SgsUVSB1
Perl6使ってる香具師さんいますか?
100デフォルトの名無しさん
2019/09/15(日) 00:02:41.49ID:epz106Yo bashで凝ったことを書くことを考えたら、Perlのほうがはるかに簡単。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。
101デフォルトの名無しさん
2019/09/15(日) 17:56:28.72ID:riyG3w3b Perlの利点?
他の言語と同様になんでもできることかな。モジュール色々使うと作るの楽だしOSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
シェルスクリプトも外部コマンド動かせば何でもできるとは言えるが、起動のオーバーヘッドの問題や起動しているコマンドの仕様が変わったときに個別に対応しなければいけないなど面倒な事がある。
他の言語と同様になんでもできることかな。モジュール色々使うと作るの楽だしOSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
シェルスクリプトも外部コマンド動かせば何でもできるとは言えるが、起動のオーバーヘッドの問題や起動しているコマンドの仕様が変わったときに個別に対応しなければいけないなど面倒な事がある。
102デフォルトの名無しさん
2019/10/23(水) 15:22:28.55ID:Q75cL8J3 >>101
> OSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
これでとんでもない目に遭ったぞ。
perlの\nは、内部的にはLF のみだが、OSがWindowsなら、出力する際に
CR+LF に自動的に変換してくれる。
しかし、出力文字コードがutf16le だと、特殊な宣言文を書かない限り、
LF (0x000a)は 「0x000a000d」ではなく、「0x000a0d」に変換され、
ぐちゃぐちゃに文字化けする。
文字化けの原因を特定し、回避方法を見つけるために、ずいぶん時間を取られた。
> OSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
これでとんでもない目に遭ったぞ。
perlの\nは、内部的にはLF のみだが、OSがWindowsなら、出力する際に
CR+LF に自動的に変換してくれる。
しかし、出力文字コードがutf16le だと、特殊な宣言文を書かない限り、
LF (0x000a)は 「0x000a000d」ではなく、「0x000a0d」に変換され、
ぐちゃぐちゃに文字化けする。
文字化けの原因を特定し、回避方法を見つけるために、ずいぶん時間を取られた。
103デフォルトの名無しさん
2019/10/23(水) 15:31:23.16ID:7+59i/z7 chcp 1200でいけそうな気がするんだけど
104デフォルトの名無しさん
2019/10/23(水) 17:37:45.28ID:azQS8Nqn >>102
\n は他の言語でも気を付けた方が良い。
例えC言語だったとしても歴史的な事情でライブラリが勝手に変換するかも知れない。
この頃はそれにまつわるバグは減ってるとは思うけどね。
ま、少なくとも \n を \x0a だと信じ込んで使うのは止めた方がいいだろうな。
\x0a はあくまでも \x0a と書いた方が良い。
Javaとかでは改行は System.out.println() を使って改行させるようにして \n を埋め込んでの改行は極力避けた方が良い。
\n は他の言語でも気を付けた方が良い。
例えC言語だったとしても歴史的な事情でライブラリが勝手に変換するかも知れない。
この頃はそれにまつわるバグは減ってるとは思うけどね。
ま、少なくとも \n を \x0a だと信じ込んで使うのは止めた方がいいだろうな。
\x0a はあくまでも \x0a と書いた方が良い。
Javaとかでは改行は System.out.println() を使って改行させるようにして \n を埋め込んでの改行は極力避けた方が良い。
105デフォルトの名無しさん
2019/10/24(木) 00:15:31.72ID:dNYiTPCj106デフォルトの名無しさん
2019/10/24(木) 00:54:14.51ID:NQorbS3o s/\n//g;
s/\r//g;
俺は常にこうしてる
s/\r//g;
俺は常にこうしてる
107デフォルトの名無しさん
2019/10/24(木) 06:24:46.42ID:rCe9ez9s \nを埋め込んだ箇所が一つでもあったらアウト
みたいな作り方は絶対失敗する
みたいな作り方は絶対失敗する
108デフォルトの名無しさん
2019/10/24(木) 08:28:21.30ID:wmDm31X8109デフォルトの名無しさん
2019/10/24(木) 09:04:15.10ID:LjTGtkP8 >>105
> いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。
結論としては、下のように書けばいいのだが、これはネットで色々探して
見つけてきたもので、PerlIO の man 読んで自分で見い出すことは、
私にはできなかった。それが出来る人は凄いと思う。
binmode STDOUT => ":raw:encoding(utf16le):crlf";
> いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。
結論としては、下のように書けばいいのだが、これはネットで色々探して
見つけてきたもので、PerlIO の man 読んで自分で見い出すことは、
私にはできなかった。それが出来る人は凄いと思う。
binmode STDOUT => ":raw:encoding(utf16le):crlf";
110デフォルトの名無しさん
2019/10/24(木) 22:37:27.00ID:rCe9ez9s 右から読むんだよ
111デフォルトの名無しさん
2019/11/06(水) 01:45:01.50ID:yvB3xxPc 消費税計算(10%)しようとしました。税込550円を消費税と本体価格にする。
$a = 550;
$b = 1.1;
$c = $a / $b;
$d = $a - $c;
$e = int($c);
$f = int ($d);
print すると、
$c は 500
$d は 50.000000000001(0の数はだいたい)
$e は 499
$d は 50
とうやら550 / 1.1 が内部的に割り切れていない様子(おそらく実際は内部的に499.99999999999999になってるのでintすると499に)
ロジックの変更で回避したけど、このバグ聞いたことありますか?
$a = 550;
$b = 1.1;
$c = $a / $b;
$d = $a - $c;
$e = int($c);
$f = int ($d);
print すると、
$c は 500
$d は 50.000000000001(0の数はだいたい)
$e は 499
$d は 50
とうやら550 / 1.1 が内部的に割り切れていない様子(おそらく実際は内部的に499.99999999999999になってるのでintすると499に)
ロジックの変更で回避したけど、このバグ聞いたことありますか?
112デフォルトの名無しさん
2019/11/06(水) 02:54:03.98ID:normnvJW113デフォルトの名無しさん
2019/11/06(水) 03:29:15.89ID:normnvJW >>111
おせっかいかもだがもうひとつ。
その手の誤差を回避するのは、ロジックでなんとかできることもあるが、実際にはなかなか難しいはず。
たまたま誤差が見えなくなってるだけの可能性もありそうなので、動作確認は慎重にな。
ちゃんとやるなら、decimal的なモジュールを使ったほうが。
あるかどうかは知らんけど。
おせっかいかもだがもうひとつ。
その手の誤差を回避するのは、ロジックでなんとかできることもあるが、実際にはなかなか難しいはず。
たまたま誤差が見えなくなってるだけの可能性もありそうなので、動作確認は慎重にな。
ちゃんとやるなら、decimal的なモジュールを使ったほうが。
あるかどうかは知らんけど。
114デフォルトの名無しさん
2019/11/06(水) 03:46:51.16ID:QwLiS9cf >>111
バクではなく仕様。
ちなみにPython,Tclで確認してみましたが同じ出力結果になりました。
どんな言語でも金額の計算や小数点の桁を調整をする場合、
int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、
出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる
必要があると思います。
バクではなく仕様。
ちなみにPython,Tclで確認してみましたが同じ出力結果になりました。
どんな言語でも金額の計算や小数点の桁を調整をする場合、
int(切り捨て)、round(四捨五入)、ceil(切り上げ)などで処理するか、
出力時に、printfやsprintfを使って、"%.0f"などを指定して桁を合わせる
必要があると思います。
115デフォルトの名無しさん
2019/11/06(水) 03:51:32.22ID:ZoqI13Ph あるよ
use bigrat;
my %ISO_number = (
100 => 0,
125 => 1/3,
160 => 2/3,
200 => 1,
250 => 4/3,
320 => 5/3,
400 => 2,
500 => 7/3,
640 => 8/3,
800 => 3,
1000 => 10/3,
1250 => 11/3,
1600 => 4,
2000 => 13/3,
2500 => 14/3,
3200 => 5,
4000 => 16/3,
5000 => 17/3,
6400 => 6,
8000 => 19/3,
10000 => 20/3,
12800 => 7,
);
# dirty hack: 0/1 force rational type
# warning: if it locate last, sum goes WRONG!
printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO};
use bigrat;
my %ISO_number = (
100 => 0,
125 => 1/3,
160 => 2/3,
200 => 1,
250 => 4/3,
320 => 5/3,
400 => 2,
500 => 7/3,
640 => 8/3,
800 => 3,
1000 => 10/3,
1250 => 11/3,
1600 => 4,
2000 => 13/3,
2500 => 14/3,
3200 => 5,
4000 => 16/3,
5000 => 17/3,
6400 => 6,
8000 => 19/3,
10000 => 20/3,
12800 => 7,
);
# dirty hack: 0/1 force rational type
# warning: if it locate last, sum goes WRONG!
printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO};
116デフォルトの名無しさん
2019/11/06(水) 09:06:26.53ID:dfSHCt1W 浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。
$c = $a / $b; # $c = 500
$e = int($c); # $e = 499
$c = $a / $b; # $c = 500
$e = int($c); # $e = 499
117デフォルトの名無しさん
2019/11/06(水) 09:28:51.28ID:i85ttsqs >>111
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。
118デフォルトの名無しさん
2019/11/06(水) 10:08:35.95ID:yvB3xxPc119デフォルトの名無しさん
2019/11/06(水) 10:29:25.24ID:i85ttsqs 言語というよりはライブラリやCPUの問題だ。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。
120デフォルトの名無しさん
2019/11/06(水) 17:59:53.94ID:j94j+HrP 言語仕様っていうと違和感あるね
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚
121デフォルトの名無しさん
2019/11/06(水) 18:58:09.30ID:yvB3xxPc >>111
一応、取った対応策です(消費税計算なので精度は不要)
除算解は有効桁数以下が切り捨てになり表示などで見える値以下になると想定しました
$a = 550;
$b = 1.1;
$c = ;
$tax= int($a - $a / $b); # $tax = 50
$net = $a - $tax; # $net = 500
端数を残したまま税込から除算解を引いてintして税とし、税込から税を引いて本体としました
とりあえず期待した結果は得られています
ありがとうございました。
一応、取った対応策です(消費税計算なので精度は不要)
除算解は有効桁数以下が切り捨てになり表示などで見える値以下になると想定しました
$a = 550;
$b = 1.1;
$c = ;
$tax= int($a - $a / $b); # $tax = 50
$net = $a - $tax; # $net = 500
端数を残したまま税込から除算解を引いてintして税とし、税込から税を引いて本体としました
とりあえず期待した結果は得られています
ありがとうございました。
122デフォルトの名無しさん
2019/11/06(水) 18:59:08.05ID:yvB3xxPc $c = ;
この行余計でした
この行余計でした
123デフォルトの名無しさん
2019/11/06(水) 19:44:41.92ID:mEOqpT9o >>120
C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w
C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w
124デフォルトの名無しさん
2019/11/06(水) 19:52:26.69ID:mEOqpT9o >>121
税率によってはきっとアカン場合がありそう。。。
単純な切り捨てはヤバいような。
まあ、そこまでの精度はイランのやろけども。
ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう?
税率によってはきっとアカン場合がありそう。。。
単純な切り捨てはヤバいような。
まあ、そこまでの精度はイランのやろけども。
ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう?
125デフォルトの名無しさん
2019/11/06(水) 20:39:05.70ID:yvB3xxPc126デフォルトの名無しさん
2019/11/06(水) 21:15:49.18ID:i85ttsqs 1.1を掛けるなら11を掛けてから10で割った方が良いかもな。そうすると正数計算でやれる。
切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。
切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。
127デフォルトの名無しさん
2019/11/06(水) 21:18:49.26ID:i85ttsqs ああ。逆か。税込みから本体と税を求めるのか。でも考え方は同じだな。
128デフォルトの名無しさん
2019/11/07(木) 00:06:59.16ID:gr4VkOsJ >>125
違うぞ。今回の問題点をちゃんとわかってるか?
1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。
誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。
違うぞ。今回の問題点をちゃんとわかってるか?
1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。
誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。
129デフォルトの名無しさん
2019/11/07(木) 00:07:26.65ID:gr4VkOsJ130デフォルトの名無しさん
2019/11/07(木) 01:08:34.48ID:q6f07NqD131デフォルトの名無しさん
2019/11/07(木) 01:12:13.17ID:q6f07NqD132デフォルトの名無しさん
2019/11/09(土) 10:00:40.69ID:q+fGPpet どちらにせよ、小数点以下をどう扱うかは仕様で決めないとダメだな。
133デフォルトの名無しさん
2019/11/14(木) 22:54:58.33ID:cMIrVE8k ファイルハンドル($fh)からファイル名を取得する方法ってありますか?
・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。
*{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。
基本的にそういう思想がないってことかも知れません。
・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。
*{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。
基本的にそういう思想がないってことかも知れません。
134デフォルトの名無しさん
2019/11/15(金) 00:28:22.57ID:WAwhq9DE ムリやろ。
ファイル名のないファイルハンドルも少なくないしな。
ファイル名のないファイルハンドルも少なくないしな。
135デフォルトの名無しさん
2019/11/15(金) 12:49:10.35ID:qkK0C17l ファイルハンドルからファイル名を求めるシステムコールとかもないしな。
ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。
自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。
ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。
自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。
136デフォルトの名無しさん
2019/11/15(金) 22:37:17.80ID:9LSwivmi お二方ありがとう
そもそもそういう使い方をするものではないって理解しました
そもそもそういう使い方をするものではないって理解しました
137デフォルトの名無しさん
2019/11/17(日) 00:22:07.56ID:+/PgA3gU そもそもファイルをopenした時点で、ファイル名は自明だろ、、、
<>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、
while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof }
他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。
<>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、
while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof }
他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。
138デフォルトの名無しさん
2019/11/17(日) 00:47:01.26ID:7P3Fm4Oa >>137
ファイルハンドルだけもらうクラスかもよ
ファイルハンドルだけもらうクラスかもよ
139デフォルトの名無しさん
2019/11/17(日) 01:44:18.01ID:cO7DNsZu いや、気持ちはわかるやろ。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。
140デフォルトの名無しさん
2019/11/17(日) 07:47:40.51ID:bNRHw2eJ ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。
141デフォルトの名無しさん
2019/11/17(日) 12:07:49.00ID:Ew4nGi4g142デフォルトの名無しさん
2019/11/18(月) 08:50:22.41ID:4tmHvePg ActivePerl 5.22 から 5.28 にアップデートしたのだが、
次のものがなくなってしまって、とても不便になった気がする。
・PerlEz.dll
・ppm(perlパッケージマネージャー)
・htmlドキュメント
他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、
5.22 に戻した。もう一生5.22 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?
次のものがなくなってしまって、とても不便になった気がする。
・PerlEz.dll
・ppm(perlパッケージマネージャー)
・htmlドキュメント
他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、
5.22 に戻した。もう一生5.22 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?
143デフォルトの名無しさん
2019/11/18(月) 20:45:39.28ID:2uYwgX87 Strawberry Perl 使えよ
144デフォルトの名無しさん
2019/11/22(金) 22:32:44.69ID:G0qxcoi/ そういやみんな最新の安定版使ってんの?
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。
145デフォルトの名無しさん
2019/11/22(金) 23:56:39.64ID:0hNsLKVA 5.16.3だな
多分意味は無い
多分意味は無い
146デフォルトの名無しさん
2019/11/23(土) 00:04:49.15ID:pA1s2lMR 俺もCentOSのデフォルトだわ
5.16.x
もう枯れてるしね
5.16.x
もう枯れてるしね
147デフォルトの名無しさん
2019/11/23(土) 00:20:10.52ID:FBMqwUlj ずっと5.8.9のままだわ
とにかく安定している
とにかく安定している
148デフォルトの名無しさん
2019/11/23(土) 01:08:20.02ID:uP8OeUg3 perlのワンライナーについて質問です。
cat /home/xxx/aaa.txt | perl -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" > bbb.txt
上記のようにすると、END部分の終了メッセージもbbb.txtに保存されてしまいます。
そこで下記のようにしてみたのですが、入力ファイルの指定と"--"以降の引数がうまく与えられずエラーになります。
perl -i -spe 's/AA/$var/; END{print "complated.\n"}' /home/xxx/aaa.txt -- -var="BB"
どのようにすれば入力ファイルの指定と変数渡しを一緒にできますか?
cat /home/xxx/aaa.txt | perl -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" > bbb.txt
上記のようにすると、END部分の終了メッセージもbbb.txtに保存されてしまいます。
そこで下記のようにしてみたのですが、入力ファイルの指定と"--"以降の引数がうまく与えられずエラーになります。
perl -i -spe 's/AA/$var/; END{print "complated.\n"}' /home/xxx/aaa.txt -- -var="BB"
どのようにすれば入力ファイルの指定と変数渡しを一緒にできますか?
149デフォルトの名無しさん
2019/11/23(土) 01:52:51.48ID:0LKgjFg3 5.30.0
なるべく最新の安定版を追っかけてる
なるべく最新の安定版を追っかけてる
150デフォルトの名無しさん
2019/11/23(土) 02:19:04.46ID:En+bKilB >>148
STDERRにprintすれば?
STDERRにprintすれば?
151デフォルトの名無しさん
2019/11/23(土) 10:12:25.15ID:Dim3LBiC perl5.26.1
perl2exe 使うので。
perl2exe 使うので。
152デフォルトの名無しさん
2019/11/24(日) 00:31:51.83ID:jceUCsgs >>150
ご意見有難うございます。
ファイルを一番最後に入れるとできるということがわかりました。
perl -i -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" /home/xxx/aaa.txt
ご意見有難うございます。
ファイルを一番最後に入れるとできるということがわかりました。
perl -i -spe 's/AA/$var/; END{print "complated.\n"}' -- -var="BB" /home/xxx/aaa.txt
153デフォルトの名無しさん
2019/11/25(月) 10:33:31.52ID:veETdbiQ >>152
-i があるからでは?
-i.bak とかやっとくと .bak をファイル名に付加したバックアップ作れるよ。
多分新規ファイル開いてそちらに出力して後でリネームして元ファイルのバックアップを取ろうとしてるんだろうと思う。
-i の直後に何もない場合はバックアップ取らずに元ファイルにリネームだけやってるんだと思う。
-i があるからでは?
-i.bak とかやっとくと .bak をファイル名に付加したバックアップ作れるよ。
多分新規ファイル開いてそちらに出力して後でリネームして元ファイルのバックアップを取ろうとしてるんだろうと思う。
-i の直後に何もない場合はバックアップ取らずに元ファイルにリネームだけやってるんだと思う。
154デフォルトの名無しさん
2019/11/26(火) 23:14:08.94ID:EA1DZQ5h >>153
コメントありがとうございます。
今回やることはファイルに上書きしたくバックアップもいらなかったので -i で良いかなと思っていました。
ワンライナーはよくお世話になってるのですが、今回-sでperl内に変数として渡せることがわかり、ますます重宝しそうです。
コメントありがとうございます。
今回やることはファイルに上書きしたくバックアップもいらなかったので -i で良いかなと思っていました。
ワンライナーはよくお世話になってるのですが、今回-sでperl内に変数として渡せることがわかり、ますます重宝しそうです。
155デフォルトの名無しさん
2019/11/30(土) 17:02:59.68ID:hCKH6fU7 今日、学んだこと。
/^([a-c]){2}\1/
は 'abb' にはマッチできるが 'aba' にはマッチできない。
もちろん 'aaa' にはマッチできるが…要するに
/^([a-c]){2}\1/
は
/^([a-c])\1\1/
と同じではなかった。
/^([a-c]){2}\1/
は 'abb' にはマッチできるが 'aba' にはマッチできない。
もちろん 'aaa' にはマッチできるが…要するに
/^([a-c]){2}\1/
は
/^([a-c])\1\1/
と同じではなかった。
156デフォルトの名無しさん
2020/02/01(土) 09:03:36.56ID:qxbFBKGD パターンの中で\1って使えるんや…
正規表現って普通「事前に」FSMにコンパイルされてからマッチングに使うるんじゃないの…?
バックトラックとかする高度な実装のやつはまた違うんかね
正規表現って普通「事前に」FSMにコンパイルされてからマッチングに使うるんじゃないの…?
バックトラックとかする高度な実装のやつはまた違うんかね
157デフォルトの名無しさん
2020/02/01(土) 13:27:18.26ID:wtOh7v6m158デフォルトの名無しさん
2020/02/02(日) 08:34:53.41ID:7b/FZYuN >>157
話が通じなさそうで大変よろしい
話が通じなさそうで大変よろしい
159デフォルトの名無しさん
2020/02/02(日) 13:46:05.69ID:9cWLJdKQ s/(pattern)/\1/
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ
という使い方をするもんだと思いこんでいて、謎のバグに悩んだ
160デフォルトの名無しさん
2020/02/04(火) 19:17:18.71ID:64ds8brY perl hacks買った
送料込み300円
送料込み300円
161デフォルトの名無しさん
2020/02/04(火) 19:49:23.22ID:53yGrLtS 買われてしまった。
モダンperl入門でも買おうかな
モダンperl入門でも買おうかな
162デフォルトの名無しさん
2020/02/05(水) 00:34:08.21ID:Yyzz6n+F 今さら「モダン」もないやろ。w
どうとでも好きに書いたらええがな。
どうとでも好きに書いたらええがな。
163デフォルトの名無しさん
2020/02/05(水) 04:02:23.57ID:rxl56Lqp モダンとか死語だもんな
そういうワード使うしかなかった当時の状況もあるけど
そういうワード使うしかなかった当時の状況もあるけど
164デフォルトの名無しさん
2020/02/05(水) 17:51:27.40ID:9nK7Yle0 死語かなあ?
165デフォルトの名無しさん
2020/02/05(水) 21:33:12.52ID:SZWAnwkp166デフォルトの名無しさん
2020/02/05(水) 22:58:10.81ID:TkSDhbEE そういやモダンperl入門の新刊どうなった?
167デフォルトの名無しさん
2020/02/05(水) 23:00:15.23ID:TkSDhbEE 2014年1月予定か。たのしみやで。
168デフォルトの名無しさん
2020/02/06(木) 00:10:26.01ID:UIZEnib+ perlの最新本って、これくらいだろ
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17
初めてのPerl 第7版 2018/01/20
Effective Perl 第2版 2015/02/17
169デフォルトの名無しさん
2020/02/06(木) 00:14:16.79ID:m/3X75FJ クリスマスまでにはperl6の本が山のように出版されるからな
170デフォルトの名無しさん
2020/02/06(木) 00:24:20.95ID:T14/xjtC ドラマ「3000回目のクリスマス」
171デフォルトの名無しさん
2020/02/06(木) 00:30:59.99ID:6QnB4wyK Perl6無くなったんじゃなかったっけ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 減税は低所得者差別
- 元無職「お世話になりました」
- 【動画】陽キャ、パルクール失敗
