Perl初心者スレ(マジレス回答) (519レス)
上下前次1-新
427: 2018/08/03(金) 22:49:39.26 ID:G69i9RgI(1)調 AAS
なんだろう? 計算式で質問投稿しようとするとNGワードエラーで拒否られてしまう orz
全角でもダメかー
428(3): 427です 2018/08/04(土) 19:04:46.45 ID:pEPpCry/(1/2)調 AAS
これで書けるかな?
代入計算式のソースと書きたかった質問内容をマンゴースレに貼りました。
2chスレ:mango
429: 427です 2018/08/04(土) 19:09:36.61 ID:pEPpCry/(2/2)調 AAS
>428 の書き込みで、本来続きだった リンク先 >422 の
16進〜解説お願いできませんでしょうか?
の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね?
430(1): 2018/08/05(日) 06:11:20.74 ID:cdvogGHQ(1/4)調 AAS
>>428
よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。
とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、
それの時間単位への変換ではないか?
例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。
431(1): 2018/08/05(日) 06:13:27.55 ID:cdvogGHQ(2/4)調 AAS
時と分とは限らないか。分と秒かも知れない。まあしかし下2桁は60進法で考えなければいけないということに変わりはない。
432(1): 2018/08/05(日) 07:50:18.49 ID:cdvogGHQ(3/4)調 AAS
>>428
ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している?
仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の
変数への変換自体は終わっている。
つまり、コメントが紛らわしい表現になっているだけ。
433(1): 427です これは書けるかな? 2018/08/05(日) 12:21:43.54 ID:gWGunr7x(1/2)調 AAS
>430-432 スミマセンです。 orz
もっと詳しく書こうとするとマンゴースレでもブロックされました。
ぶっちゃけ、この中の
外部リンク[zip]:motor.geocities.jp
「dc10mov2csv.pl」内です。
gps_data{'latitude'}の部分からです
gps_data{'bearing'}の式は
変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか?
これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。
434(1): 2018/08/05(日) 17:23:40.10 ID:cdvogGHQ(4/4)調 AAS
>>433
pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。
外部リンク:perldoc.jp
まあでも今時の普通のPC用Perlならなってそうな気がするけどね。
latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。
だから下2桁を60進法で考える必要があると。
やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。
bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。
で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。
435: 427です 2018/08/05(日) 21:57:54.47 ID:gWGunr7x(2/2)調 AAS
>>434
ありがとうございます。
全体からずらして抜いたもの60進法にしてるだけなんですね。
てっきりバイナリから浮動小数点を出す特殊計算かと思っていました。
適当にがんばります。
436: 2018/10/05(金) 20:29:10.24 ID:ZpFL29Ml(1)調 AAS
「サンプル」の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: 2018/10/05(金) 21:39:08.56 ID:liWk4NPs(1)調 AAS
まずは自分で書いてみたコードを晒すところからだな。
438(2): 2018/10/05(金) 22:57:27.02 ID:kjx9soPU(1)調 AAS
一行プログラムが思い浮かんだ。
最初の列をハッシュのキーにして3列目をpush。
全部読んだらキーをソートして読んだ内容に番号降りつつ出力。
しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。
439(1): 2018/10/06(土) 00:22:39.61 ID:mGKg2bAW(1)調 AAS
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: 2018/10/06(土) 02:20:13.04 ID:m3dYH3N7(1)調 AAS
考え方は >>439 と同じ
perl -pe "s/^([^,]+,)[^,]+/$1.++$count{$1}/e" < sample.csv
441: 2018/10/06(土) 03:33:56.69 ID:gPBhgV7B(1)調 AAS
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:28.44 ID:J8Y2BFN6(1/2)調 AAS
おはよう。
元のテキストが 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:52.15 ID:J8Y2BFN6(2/2)調 AAS
あ、そうか。貯め込む必要はなくてハッシュ作ってそのまんま出せば良いんだよな。
じゃあawkの方が楽ではないか?
awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt
444: 2018/10/06(土) 17:28:12.58 ID:MMGbFZjG(1)調 AAS
436です。皆様ありがとうございました。
自分では1行ずつ処理することまでしかできず、複数レコードの
1コラム目の比較をすることができませんでした。
おかげさまで体育の日に子供の運動会に行けます!
ありがとうございました!
445: 2018/11/11(日) 14:10:45.60 ID:eqm/EHYd(1/2)調 AAS
上の方のレスにも関連したものがありますが、
ファイルから読み込んだ文字列データにて
パターンマッチがヒットしません。
同一文字列を直接コード内に定義すると、ヒットします。
出来ればファイルに切り出したいので、
ご教示いただけますでしょうか。
446(1): 2018/11/11(日) 14:11:11.73 ID:eqm/EHYd(2/2)調 AAS
[環境]
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: 2018/11/11(日) 16:14:59.60 ID:56YuZzmp(1)調 AAS
>>446
改行文字の有無?
448: 2018/11/11(日) 18:17:18.70 ID:t5AG7sJB(1)調 AAS
たぶんそれだな。$line の中身が "テスト\r\n" または "テスト\n" になってそう。
449: 2018/11/12(月) 00:16:54.10 ID:MtlIUxHY(1)調 AAS
chomp($line); するべき
450(2): 2018/11/12(月) 07:45:13.53 ID:8fj5l105(1)調 AAS
遅くなりすみません。
テストファイルには改行を入れていなかったのですが、
chompが必要なのですね。
ファイルからレコードを取得するにはchompが必要と勉強になりました。
ありがとうございました。
451: 2018/11/12(月) 09:22:08.61 ID:I5PkaEyl(1)調 AAS
>>450
いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。
452: 2018/11/13(火) 17:15:58.77 ID:WOZg75XW(1)調 AAS
utf-8がボムがついている可能性もあるね
453(2): 2018/11/13(火) 17:46:33.84 ID:/6RlnNZj(1/2)調 AAS
ところでUTF-8にBOMってなんか意味あるの?
ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね?
454(1): 2018/11/13(火) 18:09:12.36 ID:3HdfrOce(1)調 AAS
>>453
あるよ、BOMがあればUTF-8だと文字コードを
簡単に判定できる
つまり、文字化け防止に役立つ
みんなBOM付けるようにすれば良かったんだけどな
455(1): 2018/11/13(火) 19:44:37.81 ID:/6RlnNZj(2/2)調 AAS
あー。magic用か。
456(1): 2018/11/14(水) 00:34:48.87 ID:efwoHdbt(1)調 AAS
>>450
ですが、改行が入っていました。
遅くなりすみません。
すみませんでした。確認をしっかりします。
もう一つ質問があるのですが、>>450の環境にて、パターンマッチングを、全角、半角、ひらがな、カタカナ、大文字、小文字を区別することなく行いたいのですが、方法をご教示いただけますでしょうか。
457(1): 2018/11/14(水) 09:45:09.68 ID:bDqFuzUS(1)調 AAS
>>456
手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。
例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。
それから比較を行う。
ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。
458: 2018/11/14(水) 12:24:46.73 ID:XfG22Q3S(1/2)調 AAS
教えて下さい。
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: 2018/11/14(水) 12:38:11.11 ID:XfG22Q3S(2/2)調 AAS
うっかり自己解決しました。数時間悩んだのに。
print @{ ${ $ref4 }[0] };
print @{ ${ $ref4 }[0] }[1];
460: 2018/11/14(水) 19:36:24.69 ID:dXHPcciK(1)調 AAS
>>457
オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。
ActivePerlでUnicode::Japanese
でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。
ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。
461: 2018/11/14(水) 20:41:47.52 ID:bryEJhFF(1)調 AAS
UNICODEにはcomposed、decomposedというややこしいものもあるんだよね。
外部リンク[html]:pointoht.ti-da.net
Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。
462(2): 2018/11/14(水) 22:57:23.73 ID:otO/yyOk(1/2)調 AAS
>>453-455
Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、
BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、
そうすると、Windows では、sjis と区別がつかなくなり、
Explorer での文字列検索ができなくなる
だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている
463: 462 2018/11/14(水) 23:51:54.30 ID:otO/yyOk(2/2)調 AAS
結合文字列をUnicode正規化で合成する方法の危険性
外部リンク:qiita.com
濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない
Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない
Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。
CRLF・LF の改行コードの違いは、意識したことがない。
chomp とか、どちらの改行コードでも、正常に動く
464(1): 462 2018/11/15(木) 00:11:38.19 ID:g74yzjtM(1)調 AAS
【 nkf 】コマンド――文字コードと改行コードを変換する
外部リンク[html]:www.atmarkit.co.jp
これで全角・半角の変換もできる
Perl にも、モジュールもあるのでは?
465: 2018/11/21(水) 22:55:48.65 ID:M0TZNmLm(1/2)調 AAS
>>464
有料ですがnkfのActivePerl用をnamazuというところから購入しましたが、
nkfで変換後、utf8でマッチングが不可能で調査中です。
466: 2018/11/21(水) 23:00:44.11 ID:M0TZNmLm(2/2)調 AAS
ハッシュを要素に持つハッシュへのアクセスについて
ご教示いただけますでしょうか。
下記のコードで、読込は正常に完了しますが、出力が不可能です。
$$を使用したり、試しましたがギブアップです。
#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): 2018/11/22(木) 00:04:25.39 ID:V9xGGA7p(1)調 AAS
wrote_numが何か分からんけど
my %rec; はwhile内にしたらどうですか
あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では
468: 2018/11/22(木) 10:12:03.32 ID:iCX1SQ90(1/2)調 AAS
>>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: 2018/11/22(木) 10:30:19.76 ID:Enb78Zev(1/2)調 AAS
これでいけると思いましたが、玉砕でしたw
foreach my $row (@$table){
while (my ($id, $count, $name) = each(%row)){
print encode('cp932', "$id\t$count\t$name\n");
}
470: 2018/11/22(木) 10:54:51.08 ID:iCX1SQ90(2/2)調 AAS
これでいけました!
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): 2018/11/22(木) 11:07:56.03 ID:Enb78Zev(2/2)調 AAS
これで全てのハッシュ要素を出力できますが、
カラム順が不確定になってしまいますね。
ハッシュなので仕方ないことですかね。
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:27.47 ID:+z2Jd1go(1)調 AAS
>>471
キーだけ別の配列に取っといてそれ使えば?
473: 2018/11/25(日) 19:58:05.78 ID:Ngr2zrFy(1)調 AAS
>>472
できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。
474: 2018/11/25(日) 21:54:59.45 ID:CqrOufwt(1)調 AAS
両方使えば良いのでは たまにやるよ
475: 2018/11/26(月) 04:07:41.06 ID:LFi/GsCA(1)調 AAS
>>471
foreach $col (sort keys %{$table{$row}}) {
を
foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
476: 2019/06/24(月) 04:43:33.88 ID:4+LiJo6+(1)調 AAS
自分が昔質問したことにたいして今なら回答できる
<> は <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: 2019/08/29(木) 20:58:11.72 ID:72vdfcsY(1)調 AAS
タグを除去したいのですが、<>も文に入っているため
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
478: 2019/08/30(金) 12:09:22.02 ID:VkI78Ia/(1)調 AAS
除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは?
てか、それエラーにならないの?
479: 2019/08/30(金) 13:51:46.18 ID:XCxRWcZV(1/4)調 AAS
5chの書き込みのほう、つけ忘れてました
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です
perl -pe 's/<.*?>//g'は動くんですけど
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね
480: 2019/08/30(金) 13:52:36.95 ID:XCxRWcZV(2/4)調 AAS
またやっちゃった
perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g'
481(1): 2019/08/30(金) 17:21:58.25 ID:8Dc5lx9D(1)調 AAS
こうか?
perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g'
perlというよりシェルのシングルクォートの問題
482: 2019/08/30(金) 17:42:16.91 ID:fIMZQtfT(1/2)調 AAS
そこまでするくらいなら HTML::Parser を使う方がいいと思うよ。
483: 2019/08/30(金) 17:56:41.24 ID:XCxRWcZV(3/4)調 AAS
>481
できました!、ありがとうございます。
'を'""'で括るのですね
なんで\でエスケープにならないんでしょうね
484: 2019/08/30(金) 18:04:26.61 ID:XCxRWcZV(4/4)調 AAS
パーサーも一度使ってみたんですが
<p>hoge</p><p>hoge</p>
pタグが一行に2つあると誤作動したりするんですよね
485(1): 2019/08/30(金) 23:22:18.80 ID:fIMZQtfT(2/2)調 AAS
その誤作動がパーサーのせいかどうかは判らないが、少なくとも
HTML::Parser でそんなことは起こらないから安心してほしい。
たとえばテキスト部分だけを出力したいならこんな感じでできる。
my $parser = HTML::Parser->new(
text_h => [sub { print( $_[0]) },'text'],
);
$parser->parse_file( \*STDIN);
486: 2019/08/31(土) 00:18:32.04 ID:mx6W2BK8(1)調 AAS
>485
参考になります。
パーサーもいろいろ種類あるみたいですね。
自分の使ってたのはhtml-xml-utilsというやつでした。
487: 2021/04/21(水) 00:35:38.31 ID:J2c8I4ei(1)調 AAS
@aに0を100ケ追加するには、pushをforで100回回す以外の方法ありますか
488(1): 2021/04/21(水) 03:07:59.27 ID:aE0oGLsa(1)調 AAS
push(@a, (0) x 100);
489: 2021/04/27(火) 18:16:47.03 ID:OX0aAdkQ(1)調 AAS
>>488
ありがとうございました
俺が遅くなりまして申し訳ありません
490: 2021/11/19(金) 22:27:21.73 ID:v67hT9Zk(1)調 AAS
二つ以上の空白文字列を
一つの空白に変えたいのですが
うまくいきません。
if($line=~/\s\s+/){
$line=~s/\s\s+/\s/g
print("$line\n")
}
491: 2021/11/20(土) 02:07:02.21 ID:h6kzSIM/(1)調 AAS
$line=~s/¥s¥s+/ /g
では?
492: 2021/11/20(土) 20:14:01.04 ID:xbsxU5SW(1/2)調 AAS
s/\s\s+/ /g;
でうまくいったよ。
そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。
これは俺も気を付けよう。
493: 2021/11/20(土) 20:36:42.09 ID:xbsxU5SW(2/2)調 AAS
置換といえばこのまえ、JSONで取得したUnicodeを表示したくて、
\u3042 → \N{U+3042}
に置換しようとしたけど、できなかった。
\N{U+ }←ここにはリテラルしか書けないのかな。
494(2): 2021/12/14(火) 19:15:14.22 ID:LP8Fmqr9(1)調 AAS
if文で真偽値を判定するのってどうやるの?
hoge() or die("Error\n");
ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて
my $a = hoge();
if( ! $a ){ print("Error\n"); exit $!; }
みたいにしたんだけど、if文の書き方ってこんなんで良いの?
495(2): 2021/12/25(土) 19:09:39.02 ID:pJ3Bii8w(1)調 AAS
>>494
0を返しても、0という文字(アスキーコード0x30)として扱われたりするから、俺は
if(scalar($a)) {
とか
if($a eq 0) {
とかするよ。
496(1): 2021/12/25(土) 20:31:09.16 ID:62MjaTIU(1)調 AAS
>>494
良い。
! で条件反転させるんだったら unless 使っても良いと思うけどね。
unless ($a) { ... } みたいに。
497(1): 2021/12/30(木) 05:41:55.25 ID:grPlj9k3(1)調 AAS
良くないんだってば。
Perlをそういう流儀でやってるといつか痛い目にあうよ。
498: 494ではない 2021/12/30(木) 08:07:22.12 ID:j5bdR14I(1)調 AAS
>>495
マジか。
my $a = hoge();
において、左辺が 0、右辺が 0x30 になるのは、言語としてぶっ壊れているんじゃね?
499: 2021/12/30(木) 17:49:56.83 ID:QArx8wCq(1)調 AAS
そういう言語なの
0 but true
なんていう値もあるし
500: 2022/01/10(月) 19:33:13.97 ID:2hS04FMw(1)調 AAS
do what perl mean
501: 2022/01/11(火) 00:17:50.61 ID:Xf79Fgui(1)調 AAS
bool値ほしい
502: 2022/03/27(日) 23:43:39.11 ID:TRkpHzjA(1)調 AAS
>>497
じゃあどうすればいいの?
503: 2022/04/28(木) 20:33:01.74 ID:KupWcmJ5(1)調 AAS
元の
hoge() or die("Error\n");
が問題なく動いてるなら
hoge() or print("Error\n"), die $!;
504: 2022/06/11(土) 13:31:52.57 ID:XcUjU1KU(1)調 AAS
hoge()が0を返しうるかどうかもわからんと思うのだが
>元の
>hoge() or die("Error\n");
>が問題なく動いてるなら
という前提の下で >>495 の配慮に意味があるの? >>496 で十分
hoge() or が動くという前提を無視するとして
もしもhoge()が0を含む数値か失敗を返すなら(空文字を含む文字列か失敗でもいい)
失敗にundefを返してdefinedで受けるのがフツー
505(1): 2023/12/15(金) 06:59:42.19 ID:aRdlBUAD(1)調 AAS
$_ ← これ、なんて読む?
perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
506: 2023/12/19(火) 00:32:16.33 ID:LgO8Ui43(1)調 AAS
ドル・アンダーバーじゃないかな。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
507: 505 2023/12/21(木) 12:15:47.33 ID:nsa/DjJa(1)調 AAS
おつあり
そういやそんなの(トップバー)あったねえ なるほど
508: 2024/02/09(金) 17:07:48.28 ID:LEmbefGZ(1)調 AAS
V5.38.2
32ビット
外部リンク:github.com
64ビット
外部リンク:github.com
509: 2024/03/03(日) 23:39:10.39 ID:1cRqRnnX(1)調 AAS
なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが)
perlと関係なかったらすみません…
510: 2024/03/16(土) 03:41:28.53 ID:I49Gallj(1)調 AAS
StrawberryPerlで
$str='あ';
if ($str =~ /^[あいう]$/) {print("match\n");}
を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
511(1): 2024/03/16(土) 08:42:58.43 ID:E8XsMGej(1/2)調 AAS
print length $str; を入れてみたらわかる
512: 2024/03/16(土) 09:03:33.98 ID:E8XsMGej(2/2)調 AAS
もしかして: \p{sc=Hiragana}
513: 2024/03/16(土) 09:16:48.08 ID:1WMRgWrv(1)調 AAS
ネタにマジレス
514: 2024/03/16(土) 11:57:07.41 ID:Xoe9pkvE(1)調 AAS
>>511
レスどうもです
Shift-JISの環境で正しく2とカウントされてます
前記はあくまで例ですので全角文字なら他の文字でもこうなるみたいで
ひらがなにマッチさせたいわけではないんです
515: 2024/03/16(土) 15:20:26.94 ID:e8kHlvhU(1)調 AAS
少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね?
516: 2024/03/16(土) 15:27:36.56 ID:HqlfXJdH(1)調 AAS
推奨されてないけど
use encoding 'sjis'
ならsjisでコード書けたと思う
jperlナツカシス
517: 2024/03/24(日) 16:38:15.53 ID:gHSiAGjm(1)調 AAS
Windows では Filter::Encoding いれて使ってた
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
518: 2024/07/23(火) 22:33:05.15 ID:Ott+kcdk(1/2)調 AAS
外部リンク[10]:github.com
Strawberry Perl 5.39.10.1
519: 2024/07/23(火) 22:33:17.30 ID:Ott+kcdk(2/2)調 AAS
外部リンク:github.com
5.40.0.1-RC1
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 1.626s*