Perl初心者スレ(マジレス回答) (523レス)
1-

1
(5): デフォルトの名無しさん [sage] 2012/10/07(日)00:48
どうぞー
424: デフォルトの名無しさん [sage] 2018/07/12(木)14:35 ID:EgbO6wCv(1)
Perlの勉強始めました。
425: デフォルトの名無しさん [] 2018/07/12(木)16:09 ID:sm9NZXwJ(1)
冷やし中華始めました。
426: デフォルトの名無しさん [sage] 2018/07/19(木)12:24 ID:0leqnnH4(1)
Xorgってperlで描かれてるコマンドが多い気がするけどなんで?
427: デフォルトの名無しさん [sage] 2018/08/03(金)22:49 ID:G69i9RgI(1)
なんだろう? 計算式で質問投稿しようとするとNGワードエラーで拒否られてしまう orz
全角でもダメかー
428
(3): 427です [sage] 2018/08/04(土)19:04 ID:pEPpCry/(1/2)
これで書けるかな?

代入計算式のソースと書きたかった質問内容をマンゴースレに貼りました。
2chスレ:mango
429: 427です [sage] 2018/08/04(土)19:09 ID:pEPpCry/(2/2)
>428 の書き込みで、本来続きだった リンク先 >422
16進〜解説お願いできませんでしょうか?
の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね?
430
(1): デフォルトの名無しさん [] 2018/08/05(日)06:11 ID:cdvogGHQ(1/4)
>>428
よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。
とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、
それの時間単位への変換ではないか?

例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。
431
(1): デフォルトの名無しさん [] 2018/08/05(日)06:13 ID:cdvogGHQ(2/4)
時と分とは限らないか。分と秒かも知れない。まあしかし下2桁は60進法で考えなければいけないということに変わりはない。
432
(1): デフォルトの名無しさん [] 2018/08/05(日)07:50 ID:cdvogGHQ(3/4)
>>428
ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している?

仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の
変数への変換自体は終わっている。

つまり、コメントが紛らわしい表現になっているだけ。
433
(1): 427です これは書けるかな? [sage] 2018/08/05(日)12:21 ID:gWGunr7x(1/2)
>430-432 スミマセンです。 orz
もっと詳しく書こうとするとマンゴースレでもブロックされました。
ぶっちゃけ、この中の
http://motor.geocities.jp/resermail/dc10tools.zip
「dc10mov2csv.pl」内です。

gps_data{'latitude'}の部分からです

gps_data{'bearing'}の式は
変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか?

これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。
434
(1): デフォルトの名無しさん [] 2018/08/05(日)17:23 ID:cdvogGHQ(4/4)
>>433
pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。
http://perldoc.jp/func/pack
まあでも今時の普通のPC用Perlならなってそうな気がするけどね。

latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。
だから下2桁を60進法で考える必要があると。

やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。
bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。
で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。
435: 427です [sage] 2018/08/05(日)21:57 ID:gWGunr7x(2/2)
>>434
ありがとうございます。
全体からずらして抜いたもの60進法にしてるだけなんですね。
てっきりバイナリから浮動小数点を出す特殊計算かと思っていました。
適当にがんばります。
436: デフォルトの名無しさん [sage] 2018/10/05(金)20:29 ID:ZpFL29Ml(1)
「サンプル」のCSVを文末の「結果」に変換するプログラムをPerlで作りたいです。
● サンプルのCSVの構造:
1コラム目:数字8桁の昇順、2コラム目:数字1桁、3コラム目:文字列
● 作りたいプログラム:
1コラム目、3コラム目は保持する。複数レコードで1コラム目に重複があれば、
それらの複数レコードの2コラム目の1桁数字を連番にする。
1コラム目に重複がない場合は、当該レコードの2コラム目を1にする。

● 「サンプル」
06030002,6,文字列A
06030004,3,文字列B
06030004,4,文字列C
06030004,5,文字列D
06030005,3,文字列E
06030005,4,文字列F
06030006,3,文字列G
06030006,4,文字列H
06030006,7,文字列I
06030007,3,文字列J
06030008,3,文字列K
● 「結果」
06030002,1,文字列A
06030004,1,文字列B
06030004,2,文字列C
06030004,3,文字列D
06030005,1,文字列E
06030005,2,文字列F
06030006,1,文字列G
06030006,2,文字列H
06030006,3,文字列I
06030007,1,文字列J
06030008,1,文字列K
437: デフォルトの名無しさん [sage] 2018/10/05(金)21:39 ID:liWk4NPs(1)
まずは自分で書いてみたコードを晒すところからだな。
438
(2): デフォルトの名無しさん [] 2018/10/05(金)22:57 ID:kjx9soPU(1)
一行プログラムが思い浮かんだ。

最初の列をハッシュのキーにして3列目をpush。
全部読んだらキーをソートして読んだ内容に番号降りつつ出力。

しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。
439
(1): デフォルトの名無しさん [sage] 2018/10/06(土)00:22 ID:mGKg2bAW(1)
Ruby で作った

require 'csv'

count = Hash.new( 0 ) # 初期値は、0

# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
CSV.foreach( "input.csv" ) do |row|
count[ row[ 0 ] ] += 1
row[ 1 ] = count[ row[ 0 ] ]

puts row.join( "," )
end
440: デフォルトの名無しさん [sage] 2018/10/06(土)02:20 ID:m3dYH3N7(1)
考え方は >>439 と同じ

perl -pe "s/^([^,]+,)[^,]+/$1.++$count{$1}/e" < sample.csv
441: デフォルトの名無しさん [sage] 2018/10/06(土)03:33 ID:gPBhgV7B(1)
my @y = "";
while(<>) {
my @x = split ",";
# $x[1] = $x[0] eq $y[0] && ++$y[1] || 1;
$x[1] = $x[0] ne $y[0] || ++$y[1];
print join ",", (@y = @x);
}
ウチでやるならこうかしら
442: 438 [] 2018/10/06(土)06:07 ID:J8Y2BFN6(1/2)
おはよう。

元のテキストが s.txt に入っているとして、こうする。

perl -ne 'chomp;@d=split/,/;push(@{$h{$d[0]}},$d[2]);END{for(sort keys%h){for($i=0;$i<@{$h{$_}};$i++){print join(",",$_,$i+1,$h{$_}[$i])."\n"}}}' s.txt

なげーなw
443: 438 [] 2018/10/06(土)06:21 ID:J8Y2BFN6(2/2)
あ、そうか。貯め込む必要はなくてハッシュ作ってそのまんま出せば良いんだよな。

じゃあawkの方が楽ではないか?

awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt
444: デフォルトの名無しさん [sage] 2018/10/06(土)17:28 ID:MMGbFZjG(1)
436です。皆様ありがとうございました。
自分では1行ずつ処理することまでしかできず、複数レコードの
1コラム目の比較をすることができませんでした。
おかげさまで体育の日に子供の運動会に行けます!
ありがとうございました!
445: デフォルトの名無しさん [sage] 2018/11/11(日)14:10 ID:eqm/EHYd(1/2)
上の方のレスにも関連したものがありますが、
ファイルから読み込んだ文字列データにて
パターンマッチがヒットしません。
同一文字列を直接コード内に定義すると、ヒットします。

出来ればファイルに切り出したいので、
ご教示いただけますでしょうか。
446
(1): デフォルトの名無しさん [sage] 2018/11/11(日)14:11 ID:eqm/EHYd(2/2)
[環境]
Activeperl win8.1 or 2016 server
perl -v
This is perl 5, version 24, subversion 3 (v5.24.3) built for MSWin32-x64-multi-thread

[コード utf-8で作成]
#res[1]にはcp932のコードの「テスト」を含む文字列が格納されている。
$res[1] = Encode::decode('cp932', $res[1]);

#patern.txtはutf-8で「テスト」の文字列が格納されている。
open (FILE, "<:utf8", "patern.txt") or (die "$!");
my $line = <FILE>;
close(FILE);
#$line = 'テスト';←#を外して直接コードに書くとヒットする。
print encode('cp932', $line);(正常に取得できている。)

if ($res[1] =~ /$line/){
print "Hit!";
} else{
print "not Hit";
}

---出力---
>テスト
>not Hit
447: デフォルトの名無しさん [sage] 2018/11/11(日)16:14 ID:56YuZzmp(1)
>>446
改行文字の有無?
448: デフォルトの名無しさん [sage] 2018/11/11(日)18:17 ID:t5AG7sJB(1)
たぶんそれだな。$line の中身が "テスト\r\n" または "テスト\n" になってそう。
449: デフォルトの名無しさん [sage] 2018/11/12(月)00:16 ID:MtlIUxHY(1)
chomp($line); するべき
450
(2): デフォルトの名無しさん [] 2018/11/12(月)07:45 ID:8fj5l105(1)
遅くなりすみません。
テストファイルには改行を入れていなかったのですが、
chompが必要なのですね。
ファイルからレコードを取得するにはchompが必要と勉強になりました。
ありがとうございました。
451: デフォルトの名無しさん [] 2018/11/12(月)09:22 ID:I5PkaEyl(1)
>>450
いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。
452: デフォルトの名無しさん [sage] 2018/11/13(火)17:15 ID:WOZg75XW(1)
utf-8がボムがついている可能性もあるね
453
(2): デフォルトの名無しさん [] 2018/11/13(火)17:46 ID:/6RlnNZj(1/2)
ところでUTF-8にBOMってなんか意味あるの?
ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね?
454
(1): デフォルトの名無しさん [sage] 2018/11/13(火)18:09 ID:3HdfrOce(1)
>>453
あるよ、BOMがあればUTF-8だと文字コードを
簡単に判定できる

つまり、文字化け防止に役立つ
みんなBOM付けるようにすれば良かったんだけどな
455
(1): デフォルトの名無しさん [] 2018/11/13(火)19:44 ID:/6RlnNZj(2/2)
あー。magic用か。
456
(1): デフォルトの名無しさん [sage] 2018/11/14(水)00:34 ID:efwoHdbt(1)
>>450
ですが、改行が入っていました。
遅くなりすみません。
すみませんでした。確認をしっかりします。

もう一つ質問があるのですが、>>450の環境にて、パターンマッチングを、全角、半角、ひらがな、カタカナ、大文字、小文字を区別することなく行いたいのですが、方法をご教示いただけますでしょうか。
457
(1): デフォルトの名無しさん [] 2018/11/14(水)09:45 ID:bDqFuzUS(1)
>>456
手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。
例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。
それから比較を行う。

ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。
458: デフォルトの名無しさん [sage] 2018/11/14(水)12:24 ID:XfG22Q3S(1/2)
教えて下さい。

my @str4=['a','b','c','d','e'];
my $ref4=\@str4;

print $str4[0][1],"\n"; # b
print @{ $str4[0] },"\n"; # abcde

ref4を使って同様に b と abcde を表示するには、どうしたらいいですか?
459: デフォルトの名無しさん [sage] 2018/11/14(水)12:38 ID:XfG22Q3S(2/2)
うっかり自己解決しました。数時間悩んだのに。
print @{ ${ $ref4 }[0] };
print @{ ${ $ref4 }[0] }[1];
460: デフォルトの名無しさん [sage] 2018/11/14(水)19:36 ID:dXHPcciK(1)
>>457
オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。
ActivePerlでUnicode::Japanese
でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。
ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。
461: デフォルトの名無しさん [] 2018/11/14(水)20:41 ID:bryEJhFF(1)
UNICODEにはcomposed、decomposedというややこしいものもあるんだよね。
https://pointoht.ti-da.net/e8205606.html
Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。
462
(2): デフォルトの名無しさん [sage] 2018/11/14(水)22:57 ID:otO/yyOk(1/2)
>>453-455
Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、
BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、

そうすると、Windows では、sjis と区別がつかなくなり、
Explorer での文字列検索ができなくなる

だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている
463: 462 [sage] 2018/11/14(水)23:51 ID:otO/yyOk(2/2)
結合文字列をUnicode正規化で合成する方法の危険性
https://qiita.com/monokano/items/d4c37d9bc9833eaeda6e

濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない

Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない

Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。

CRLF・LF の改行コードの違いは、意識したことがない。
chomp とか、どちらの改行コードでも、正常に動く
464
(1): 462 [sage] 2018/11/15(木)00:11 ID:g74yzjtM(1)
【 nkf 】コマンド――文字コードと改行コードを変換する
http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html

これで全角・半角の変換もできる

Perl にも、モジュールもあるのでは?
465: デフォルトの名無しさん [sage] 2018/11/21(水)22:55 ID:M0TZNmLm(1/2)
>>464
有料ですがnkfのActivePerl用をnamazuというところから購入しましたが、
nkfで変換後、utf8でマッチングが不可能で調査中です。
466: デフォルトの名無しさん [sage] 2018/11/21(水)23:00 ID:M0TZNmLm(2/2)
ハッシュを要素に持つハッシュへのアクセスについて
ご教示いただけますでしょうか。
下記のコードで、読込は正常に完了しますが、出力が不可能です。
$$を使用したり、試しましたがギブアップです。

#hash.txtの中身(タブ区切り)
#1 10 テスト1
#2 5 テスト2

use Encode;
use utf8;
my %table;
my %rec;

open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
 chomp($line);
 @d = split(/\t/, $line);
 %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
 $table{$d[0]} = \%rec;
 print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");

foreach my $row (@$wrote_num){
 #出力不可能
 print encode('cp932', $row{'id'})."\t". encode('cp932', $row{'count'})."\t".encode('cp932', $row{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");
467
(1): デフォルトの名無しさん [sage] 2018/11/22(木)00:04 ID:V9xGGA7p(1)
wrote_numが何か分からんけど
my %rec; はwhile内にしたらどうですか
あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では
468: デフォルトの名無しさん [sage] 2018/11/22(木)10:12 ID:iCX1SQ90(1/2)
>>467
すみません、レス用に書き換えた元がwote_numでした
下記の様に変えましたが、アクセスできません。
意外と難しいですね。
use Encode;
use utf8;
my %table;

open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
chomp($line);
@d = split(/\t/, $line);
my %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
$table{$d[0]} = \%rec;
 print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");

foreach my $row (@$table){
print encode('cp932', $row->{'id'})."\t". encode('cp932', $row->{'count'})."\t".encode('cp932', $row->{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");

実行結果:まだアクセスできません
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
出力完了
469: デフォルトの名無しさん [sage] 2018/11/22(木)10:30 ID:Enb78Zev(1/2)
これでいけると思いましたが、玉砕でしたw

foreach my $row (@$table){
 while (my ($id, $count, $name) = each(%row)){
 print encode('cp932', "$id\t$count\t$name\n");
}
470: デフォルトの名無しさん [sage] 2018/11/22(木)10:54 ID:iCX1SQ90(2/2)
これでいけました!
foreach my $row (keys %table){
 print encode('cp932', "$table{$row}{'id'}\t$table{$row}{'count'}\t$table{$row}{'name'}\n");
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
1 10 テスト1
2 5 テスト2
出力完了

ただ、key を外して foreach my $row (%table)とすると下記の通り改行が入ります
1 10 テスト1

2 5 テスト2

出力完了
471
(2): デフォルトの名無しさん [sage] 2018/11/22(木)11:07 ID:Enb78Zev(2/2)
これで全てのハッシュ要素を出力できますが、
カラム順が不確定になってしまいますね。
ハッシュなので仕方ないことですかね。

foreach $row (sort keys %table) {
 foreach $col (sort keys %{$table{$row}}) {
 print encode('cp932', "$table{$row}{$col}\t");
}
print "\n";
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
5 2 テスト2
10 1 テスト1
出力完了
472
(1): デフォルトの名無しさん [] 2018/11/22(木)12:53 ID:+z2Jd1go(1)
>>471
キーだけ別の配列に取っといてそれ使えば?
473: デフォルトの名無しさん [sage] 2018/11/25(日)19:58 ID:Ngr2zrFy(1)
>>472
できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。
474: デフォルトの名無しさん [sage] 2018/11/25(日)21:54 ID:CqrOufwt(1)
両方使えば良いのでは たまにやるよ
475: デフォルトの名無しさん [sage] 2018/11/26(月)04:07 ID:LFi/GsCA(1)
>>471
foreach $col (sort keys %{$table{$row}}) {

foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
476: デフォルトの名無しさん [sage] 2019/06/24(月)04:43 ID:4+LiJo6+(1)
自分が昔質問したことにたいして今なら回答できる
<> は <STDIN> の単なる略ではなく
@ARGV が捕れない副作用があった
そこに詰まっていた

#!/usr/bin/env perl
use 5.010;

if (-p STDIN) {

print "May be pipe is used. I've got STDIN as below\n";

# my @lines = <STDIN>; # when <> used, perl think no @ARGV

map {state $i; ++$i;print "$i $_" } <STDIN>;

}

else {

print "This may be just single running.\n";

}

map {state $i; ++$i; print "$i argment found ==> $_\n"} @ARGV;
477: デフォルトの名無しさん [sage] 2019/08/29(木)20:58 ID:72vdfcsY(1)
タグを除去したいのですが、<>も文に入っているため
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
478: デフォルトの名無しさん [] 2019/08/30(金)12:09 ID:VkI78Ia/(1)
除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは?
てか、それエラーにならないの?
479: デフォルトの名無しさん [sage] 2019/08/30(金)13:51 ID:XCxRWcZV(1/4)
5chの書き込みのほう、つけ忘れてました
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です

perl -pe 's/<.*?>//g'は動くんですけど

perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね
480: デフォルトの名無しさん [sage] 2019/08/30(金)13:52 ID:XCxRWcZV(2/4)
またやっちゃった
perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g'
481
(1): デフォルトの名無しさん [sage] 2019/08/30(金)17:21 ID:8Dc5lx9D(1)
こうか?
perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g'
perlというよりシェルのシングルクォートの問題
482: デフォルトの名無しさん [sage] 2019/08/30(金)17:42 ID:fIMZQtfT(1/2)
そこまでするくらいなら HTML::Parser を使う方がいいと思うよ。
483: デフォルトの名無しさん [sage] 2019/08/30(金)17:56 ID:XCxRWcZV(3/4)
>481
できました!、ありがとうございます。
'を'""'で括るのですね
なんで\でエスケープにならないんでしょうね
484: デフォルトの名無しさん [sage] 2019/08/30(金)18:04 ID:XCxRWcZV(4/4)
パーサーも一度使ってみたんですが
<p>hoge</p><p>hoge</p>
pタグが一行に2つあると誤作動したりするんですよね
485
(1): デフォルトの名無しさん [sage] 2019/08/30(金)23:22 ID:fIMZQtfT(2/2)
その誤作動がパーサーのせいかどうかは判らないが、少なくとも
HTML::Parser でそんなことは起こらないから安心してほしい。
たとえばテキスト部分だけを出力したいならこんな感じでできる。

my $parser = HTML::Parser->new(
text_h => [sub { print( $_[0]) },'text'],
);
$parser->parse_file( \*STDIN);
486: デフォルトの名無しさん [sage] 2019/08/31(土)00:18 ID:mx6W2BK8(1)
>485
参考になります。
パーサーもいろいろ種類あるみたいですね。

自分の使ってたのはhtml-xml-utilsというやつでした。
487: デフォルトの名無しさん [sage] 2021/04/21(水)00:35 ID:J2c8I4ei(1)
@aに0を100ケ追加するには、pushをforで100回回す以外の方法ありますか
488
(1): デフォルトの名無しさん [sage] 2021/04/21(水)03:07 ID:aE0oGLsa(1)
push(@a, (0) x 100);
489: デフォルトの名無しさん [sage] 2021/04/27(火)18:16 ID:OX0aAdkQ(1)
>>488
ありがとうございました
俺が遅くなりまして申し訳ありません
490: デフォルトの名無しさん [] 2021/11/19(金)22:27 ID:v67hT9Zk(1)
二つ以上の空白文字列を
一つの空白に変えたいのですが
うまくいきません。

if($line=~/\s\s+/){
$line=~s/\s\s+/\s/g
print("$line\n")
}
491: デフォルトの名無しさん [sage] 2021/11/20(土)02:07 ID:h6kzSIM/(1)
$line=~s/¥s¥s+/ /g
では?
492: デフォルトの名無しさん [sage] 2021/11/20(土)20:14 ID:xbsxU5SW(1/2)
s/\s\s+/ /g;
でうまくいったよ。
そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。
これは俺も気を付けよう。
493: デフォルトの名無しさん [sage] 2021/11/20(土)20:36 ID:xbsxU5SW(2/2)
置換といえばこのまえ、JSONで取得したUnicodeを表示したくて、
\u3042 → \N{U+3042}
に置換しようとしたけど、できなかった。
\N{U+ }←ここにはリテラルしか書けないのかな。
494
(2): デフォルトの名無しさん [] 2021/12/14(火)19:15 ID:LP8Fmqr9(1)
if文で真偽値を判定するのってどうやるの?

hoge() or die("Error\n");
ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて

my $a = hoge();
if( ! $a ){ print("Error\n"); exit $!; }
みたいにしたんだけど、if文の書き方ってこんなんで良いの?
495
(2): デフォルトの名無しさん [sage] 2021/12/25(土)19:09 ID:pJ3Bii8w(1)
>>494
0を返しても、0という文字(アスキーコード0x30)として扱われたりするから、俺は
if(scalar($a)) {
とか
if($a eq 0) {
とかするよ。
496
(1): デフォルトの名無しさん [sage] 2021/12/25(土)20:31 ID:62MjaTIU(1)
>>494
良い。

! で条件反転させるんだったら unless 使っても良いと思うけどね。
unless ($a) { ... } みたいに。
497
(1): デフォルトの名無しさん [sage] 2021/12/30(木)05:41 ID:grPlj9k3(1)
良くないんだってば。
Perlをそういう流儀でやってるといつか痛い目にあうよ。
498: 494ではない [sage] 2021/12/30(木)08:07 ID:j5bdR14I(1)
>>495
マジか。
my $a = hoge();
において、左辺が 0、右辺が 0x30 になるのは、言語としてぶっ壊れているんじゃね?
499: デフォルトの名無しさん [sage] 2021/12/30(木)17:49 ID:QArx8wCq(1)
そういう言語なの
0 but true
なんていう値もあるし
500: デフォルトの名無しさん [sage] 2022/01/10(月)19:33 ID:2hS04FMw(1)
do what perl mean
501: デフォルトの名無しさん [sage] 2022/01/11(火)00:17 ID:Xf79Fgui(1)
bool値ほしい
502: デフォルトの名無しさん [] 2022/03/27(日)23:43 ID:TRkpHzjA(1)
>>497
じゃあどうすればいいの?
503: デフォルトの名無しさん [sage] 2022/04/28(木)20:33 ID:KupWcmJ5(1)
元の
hoge() or die("Error\n");
が問題なく動いてるなら
hoge() or print("Error\n"), die $!;
504: デフォルトの名無しさん [sage] 2022/06/11(土)13:31 ID:XcUjU1KU(1)
hoge()が0を返しうるかどうかもわからんと思うのだが

>元の
>hoge() or die("Error\n");
>が問題なく動いてるなら

という前提の下で >>495 の配慮に意味があるの? >>496 で十分

hoge() or が動くという前提を無視するとして
もしもhoge()が0を含む数値か失敗を返すなら(空文字を含む文字列か失敗でもいい)
失敗にundefを返してdefinedで受けるのがフツー
505
(1): デフォルトの名無しさん [sage] 2023/12/15(金)06:59 ID:aRdlBUAD(1)
$_ ← これ、なんて読む?

perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
506: デフォルトの名無しさん [sage] 2023/12/19(火)00:32 ID:LgO8Ui43(1)
ドル・アンダーバーじゃないかな。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
507: 505 [sage] 2023/12/21(木)12:15 ID:nsa/DjJa(1)
おつあり
そういやそんなの(トップバー)あったねえ なるほど
508: デフォルトの名無しさん [] 2024/02/09(金)17:07 ID:LEmbefGZ(1)
V5.38.2
32ビット
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_5382_32bit
64ビット
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_53822_64bit
509: デフォルトの名無しさん [sage] 2024/03/03(日)23:39 ID:1cRqRnnX(1)
なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが)
perlと関係なかったらすみません…
510: デフォルトの名無しさん [sage] 2024/03/16(土)03:41 ID:I49Gallj(1)
StrawberryPerlで

$str='あ';
if ($str =~ /^[あいう]$/) {print("match\n");}

を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
511
(1): デフォルトの名無しさん [sage] 2024/03/16(土)08:42 ID:E8XsMGej(1/2)
print length $str; を入れてみたらわかる
512: デフォルトの名無しさん [sage] 2024/03/16(土)09:03 ID:E8XsMGej(2/2)
もしかして: \p{sc=Hiragana}
513: デフォルトの名無しさん [sage] 2024/03/16(土)09:16 ID:1WMRgWrv(1)
ネタにマジレス
514: デフォルトの名無しさん [sage] 2024/03/16(土)11:57 ID:Xoe9pkvE(1)
>>511
レスどうもです
Shift-JISの環境で正しく2とカウントされてます
前記はあくまで例ですので全角文字なら他の文字でもこうなるみたいで
ひらがなにマッチさせたいわけではないんです
515: デフォルトの名無しさん [sage] 2024/03/16(土)15:20 ID:e8kHlvhU(1)
少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね?
516: デフォルトの名無しさん [sage] 2024/03/16(土)15:27 ID:HqlfXJdH(1)
推奨されてないけど
use encoding 'sjis'
ならsjisでコード書けたと思う
jperlナツカシス
517: デフォルトの名無しさん [sage] 2024/03/24(日)16:38 ID:gHSiAGjm(1)
Windows では Filter::Encoding いれて使ってた
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
518: デフォルトの名無しさん [] 2024/07/23(火)22:33 ID:Ott+kcdk(1/2)
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_5.39.10
Strawberry Perl 5.39.10.1
519: デフォルトの名無しさん [] 2024/07/23(火)22:33 ID:Ott+kcdk(2/2)
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/dev_5.40.0_RC1_UCRT
5.40.0.1-RC1
520: デフォルトの名無しさん [] 04/07(月)15:52 ID:ahUtunTX(1)
perlを使った応募フォームで同一人物からの応募を省きたいのですが、IPアドレス以外で応募者を識別する方法はありますか?
個人サイトの小さな応募フォームなので完璧でなくても大丈夫です
お知恵を貸していただけると助かります
521
(1): デフォルトの名無しさん [sage] 04/07(月)17:32 ID:aZeLbslJ(1)
cookie はどうよ?
522
(1): デフォルトの名無しさん [] 04/07(月)19:10 ID:LICdw+AC(1)
むしろIPでは個人識別無理
523: デフォルトの名無しさん [] 04/09(水)23:14 ID:X4PDIxY1(1)
>>521
ありがとうございます、調べてみますm(_ _)m

>>522
変な書き方をしてしまいました
今はIPアドレスで省いてるのですが、おっしゃる通り識別できないので他の方法を探してました
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.166s*