17/02/27 00:03:03.35 JWhb7pSm.net
URLリンク(perldoc.jp)
>defined(@array) と defined(%hash) は致命的エラーになりました
>これは v5.6.1 から廃止予定で、v5.16 から廃止予定警告が出力されていました。
v5.6.1は2001年、v5.16は2012年、実際に廃止されたv5.22は2015年にリリース
URLリンク(www.effectiveperlprogramming.com)
>A hash is scalar context will return the number of keys, not the hash statistics.
今年リリース予定のv5.26からはスカラーコンテキストのハッシュが返す値はハッシュの持つキーの数になるそうです
403:デフォルトの名無しさん
18/02/03 21:51:51.42 UEj2CeXM.net
Perl初心者です。独学でやり始めましたが、わからないことがあり、先輩方、何卒よろしくお願いします。
my $num = 1;
my $inc = $num++;
print “$num¥n”;
print “$inc¥n”;
変数$numは2と表示されますが、変数$incは1と表示さます。こらは仕様でしょうか。変数$incについても2が表示されると思ってたのですが。
C言語では右辺を評価した後に左辺に代入して、2が表示してたかな、と思ったので質問させていただきます。
404:デフォルトの名無しさん
18/02/03 22:48:45.47 oNG+vmom.net
>>403
Cでも++演算子は同様の結果になると思ったが?
405:デフォルトの名無しさん
18/02/03 22:55:48.24 UEj2CeXM.net
>>404
本当ですね。もっと確認してから質問するべきでした。
やりたかったことは
$inc = ++$num(
でした。C言語と同じですね。
ご教授頂きまして、どうもありがとうございました。
406:デフォルトの名無しさん
18/02/03 22:57:16.17 UEj2CeXM.net
>>405
$inc = ++$num;
の間違いです。
407:デフォルトの名無しさん
18/02/26 01:22:55.04 lGsQPowqG
フィボナッチ数列で軽く練習していたら足し算うまくいってません
$a = 1; $b = 1; $c = 2;
until ($c > 20000) {
($a, $b, $c) = ($b, $c, $a+$b);
print "a is $a\t" ; print "b is $b\t" ; print "c is $c\n" ;
}
408:デフォルトの名無しさん
18/03/03 10:59:01.85 3gz3rWpdg
>>407
フィボナッチ数列を{Fn}とすると、漸化式はFn+2 = Fn+1 + Fn (n ≧ 0)なので、
($a, $b, $c) = ($b, $c, $b+$c);
ついでに、Perlで$aと$bは特殊変数なので、一般的な変数として使わないこと。
untilは条件をひっくり返してwhileを使おう。
409:デフォルトの名無しさん
18/03/03 14:36:25.76 smAGhZZKz
>>408
ありがとうございます
410:デフォルトの名無しさん
18/05/23 20:30:23.86 Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
WVNXN
411:デフォルトの名無しさん
18/05/24 02:11:41.40 zOcuDZ4P.net
perlやってみたいど素人です。
Ubuntu 18.04がメインのマシンです
Windows XPサポート終了後難民となり
Ubuntu 16.04に辿りついてます
Ubuntuもまだまだど素人ですけど
通常に動かす所まではできます
Perlはどこから?始めたらいいでしょう
本買った方がいいのかな?
412:デフォルトの名無しさん
18/05/24 02:11:43.82 zOcuDZ4P.net
perlやってみたいど素人です。
Ubuntu 18.04がメインのマシンです
Windows XPサポート終了後難民となり
Ubuntu 16.04に辿りついてます
Ubuntuもまだまだど素人ですけど
通常に動かす所まではできます
Perlはどこから?始めたらいいでしょう
本買った方がいいのかな?
413:デフォルトの名無しさん
18/05/24 07:46:52.51 8nuNm7XP.net
どのみち本は買った方がいいと思うけど
初心者から始めるならこんなのもあるみたいよ(宣伝乙)
URLリンク(www.perl-entrance.org)
414:デフォルトの名無しさん
18/05/24 11:20:03.99 4N/yOXRV.net
>>413
独学派なんです。
415:デフォルトの名無しさん
18/06/20 03:35:44.14 CuTzdQY9.net
perlに初心者がつくとは。。perlの未来は明るい
416:デフォルトの名無しさん
18/06/20 20:53:58.17 Va19lMsb.net
Perl 6の“Neko operator”を使ってみたいのですがどのように使用すればいいでしょうか。
> 0 ^..^ 9
> say "0 ^..^ 9"
などとやっても
0 ^..^ 9
という文字列(?)が返ってくるだけなのですが……。
417:デフォルトの名無しさん
18/06/22 02:01:50.03 AmdeLsRG.net
Perl6は初心者なので全く分からない。
というかやろうとしたことすらないので知識ゼロw
418:デフォルトの名無しさん
18/06/22 08:56:04.63 Xz8qrSqH.net
perl6いつになったら実用的な実装出るのー?
419:デフォルトの名無しさん
18/06/27 17:36:19.05 rSBeNI25.net
>>416
すいませんどなたかこれ分かりませんか。
420:デフォルトの名無しさん
18/06/28 00:53:58.60 mceaYjQ2.net
>>419
perl6はまったく使ったことはないが、
範囲演算子らしいから
perl5の ... と同じように使うんじゃないのかね。
say $_ for 0 ^..^ 10;
みたいな? perl6の文法的にこれでいいかはわからんけど。
421:デフォルトの名無しさん
18/06/28 03:08:38.20 mceaYjQ2.net
perl5の範囲演算子 ... じゃなくて .. だったね。失礼。
422:デフォルトの名無しさん
18/06/28 13:40:00.67 n10gG+NH.net
>>420
できました。ありがとうございます。
423:デフォルトの名無しさん
18/06/29 22:13:55.33 jsqIPRMd.net
Neko演算子なんてあるのねw
424:デフォルトの名無しさん
18/07/04 22:52:04.22 gFgZc5FG.net
ANH
425:デフォルトの名無しさん
18/07/06 12:26:50.17 uTPDH9XV.net
ANH
426:デフォルトの名無しさん
18/07/12 14:35:34.31 EgbO6wCv.net
Perlの勉強始めました。
427:デフォルトの名無しさん
18/07/12 16:09:13.97 sm9NZXwJ.net
冷やし中華始めました。
428:デフォルトの名無しさん
18/07/19 12:24:17.38 0leqnnH4.net
Xorgってperlで描かれてるコマンドが多い気がするけどなんで?
429:デフォルトの名無しさん
18/08/03 22:49:39.26 G69i9RgI.net
なんだろう? 計算式で質問投稿しようとするとNGワードエラーで拒否られてしまう orz
全角でもダメかー
430:427です
18/08/04 19:04:46.45 pEPpCry/.net
これで書けるかな?
代入計算式のソースと書きたかった質問内容をマンゴースレに貼りました。
スレリンク(mango板:421番)-422
431:427です
18/08/04 19:09:36.61 pEPpCry/.net
>430 の書き込みで、本来続きだった リンク先 >424 の
16進~解説お願いできませんでしょうか?
の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね?
432:デフォルトの名無しさん
18/08/05 06:11:20.74 cdvogGHQ.net
>>430
よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。
とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、
それの時間単位への変換ではないか?
例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。
433:デフォルトの名無しさん
18/08/05 06:13:27.55 cdvogGHQ.net
時と分とは限らないか。分と秒かも知れない。まあしかし下2桁は60進法で考えなければいけないということに変わりはない。
434:デフォルトの名無しさん
18/08/05 07:50:18.49 cdvogGHQ.net
>>430
ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している?
仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の
変数への変換自体は終わっている。
つまり、コメントが紛らわしい表現になっているだけ。
435:427です これは書けるかな?
18/08/05 12:21:43.54 gWGunr7x.net
>432-434 スミマセンです。 orz
もっと詳しく書こうとするとマンゴースレでもブロックされました。
ぶっちゃけ、この中の
URLリンク(motor.geocities.jp)
「dc10mov2csv.pl」内です。
gps_data{'latitude'}の部分からです
gps_data{'bearing'}の式は
変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか?
これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。
436:デフォルトの名無しさん
18/08/05 17:23:40.10 cdvogGHQ.net
>>435
pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。
URLリンク(perldoc.jp)
まあでも今時の普通のPC用Perlならなってそうな気がするけどね。
latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。
だから下2桁を60進法で考える必要があると。
やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。
bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。
で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。
437:427です
18/08/05 21:57:54.47 gWGunr7x.net
>>436
ありがとうございます。
全体からずらして抜いたもの60進法にしてるだけなんですね。
てっきりバイナリから浮動小数点を出す特殊計算かと思っていました。
適当にがんばります。
438:デフォルトの名無しさん
18/10/05 20:29:10.24 ZpFL29Ml.net
「サンプル」の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
439:デフォルトの名無しさん
18/10/05 21:39:08.56 liWk4NPs.net
まずは自分で書いてみたコードを晒すところからだな。
440:デフォルトの名無しさん
18/10/05 22:57:27.02 kjx9soPU.net
一行プログラムが思い浮かんだ。
最初の列をハッシュのキーにして3列目をpush。
全部読んだらキーをソートして読んだ内容に番号降りつつ出力。
しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。
441:デフォルトの名無しさん
18/10/06 00:22:39.61 mGKg2bAW.net
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
442:デフォルトの名無しさん
18/10/06 02:20:13.04 m3dYH3N7.net
考え方は >>441 と同じ
perl -pe "s/^([^,]+,)[^,]+/$1.++$count{$1}/e" < sample.csv
443:デフォルトの名無しさん
18/10/06 03:33:56.69 gPBhgV7B.net
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);
}
ウチでやるならこうかしら
444:438
18/10/06 06:07:28.44 J8Y2BFN6.net
おはよう。
元のテキストが 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
445:438
18/10/06 06:21:52.15 J8Y2BFN6.net
あ、そうか。貯め込む必要はなくてハッシュ作ってそのまんま出せば良いんだよな。
じゃあawkの方が楽ではないか?
awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt
446:デフォルトの名無しさん
18/10/06 17:28:12.58 MMGbFZjG.net
436です。皆様ありがとうございました。
自分では1行ずつ処理することまでしかできず、複数レコードの
1コラム目の比較をすることができませんでした。
おかげさまで体育の日に子供の運動会に行けます!
ありがとうございました!
447:デフォルトの名無しさん
18/11/11 14:10:45.60 eqm/EHYd.net
上の方のレスにも関連したものがありますが、
ファイルから読み込んだ文字列データにて
パターンマッチがヒットしません。
同一文字列を直接コード内に定義すると、ヒットします。
出来ればファイルに切り出したいので、
ご教示いただけますでしょうか。
448:デフォルトの名無しさん
18/11/11 14:11:11.73 eqm/EHYd.net
[環境]
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
449:デフォルトの名無しさん
18/11/11 16:14:59.60 56YuZzmp.net
>>448
改行文字の有無?
450:デフォルトの名無しさん
18/11/11 18:17:18.70 t5AG7sJB.net
たぶんそれだな。$line の中身が "テスト\r\n" または "テスト\n" になってそう。
451:デフォルトの名無しさん
18/11/12 00:16:54.10 MtlIUxHY.net
chomp($line); するべき
452:デフォルトの名無しさん
18/11/12 07:45:13.53 8fj5l105.net
遅くなりすみません。
テストファイルには改行を入れていなかったのですが、
chompが必要なのですね。
ファイルからレコードを取得するにはchompが必要と勉強になりました。
ありがとうございました。
453:デフォルトの名無しさん
18/11/12 09:22:08.61 I5PkaEyl.net
>>452
いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。
454:デフォルトの名無しさん
18/11/13 17:15:58.77 WOZg75XW.net
utf-8がボムがついている可能性もあるね
455:デフォルトの名無しさん
18/11/13 17:46:33.84 /6RlnNZj.net
ところでUTF-8にBOMってなんか意味あるの?
ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね?
456:デフォルトの名無しさん
18/11/13 18:09:12.36 3HdfrOce.net
>>455
あるよ、BOMがあればUTF-8だと文字コードを
簡単に判定できる
つまり、文字化け防止に役立つ
みんなBOM付けるようにすれば良かったんだけどな
457:デフォルトの名無しさん
18/11/13 19:44:37.81 /6RlnNZj.net
あー。magic用か。
458:デフォルトの名無しさん
18/11/14 00:34:48.87 efwoHdbt.net
>>452
ですが、改行が入っていました。
遅くなりすみません。
すみませんでした。確認をしっかりします。
もう一つ質問があるのですが、>>452の環境にて、パターンマッチングを、全角、半角、ひらがな、カタカナ、大文字、小文字を区別することなく行いたいのですが、方法をご教示いただけますでしょうか。
459:デフォルトの名無しさん
18/11/14 09:45:09.68 bDqFuzUS.net
>>458
手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。
例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。
それから比較を行う。
ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。
460:デフォルトの名無しさん
18/11/14 12:24:46.73 XfG22Q3S.net
教えて下さい。
my @str4=['a','b','c','d','e'];
my $ref4=\@str4;
print $str4[0][1],"\n"; # b
print @{ $str4[0] },"\n"; # abcde
ref4を使って同様に b と abcde を表示するには、どうしたらいいですか?
461:デフォルトの名無しさん
18/11/14 12:38:11.11 XfG22Q3S.net
うっかり自己解決しました。数時間悩んだのに。
print @{ ${ $ref4 }[0] };
print @{ ${ $ref4 }[0] }[1];
462:デフォルトの名無しさん
18/11/14 19:36:24.69 dXHPcciK.net
>>459
オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。
ActivePerlでUnicode::Japanese
でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。
ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。
463:デフォルトの名無しさん
18/11/14 20:41:47.52 bryEJhFF.net
UNICODEにはcomposed、decomposedというややこしいものもあるんだよね。
URLリンク(pointoht.ti-da.net)
Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。
464:デフォルトの名無しさん
18/11/14 22:57:23.73 otO/yyOk.net
>>455-457
Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、
BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、
そうすると、Windows では、sjis と区別がつかなくなり、
Explorer での文字列検索ができなくなる
だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている
465:462
18/11/14 23:51:54.30 otO/yyOk.net
結合文字列をUnicode正規化で合成する方法の危険性
URLリンク(qiita.com)
濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない
Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない
Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。
CRLF・LF の改行コードの違いは、意識したことがない。
chomp とか、どちらの改行コードでも、正常に動く
466:462
18/11/15 00:11:38.19 g74yzjtM.net
【 nkf 】コマンド―文字コードと改行コードを変換する
URLリンク(www.atmarkit.co.jp)
これで全角・半角の変換もできる
Perl にも、モジュールもあるのでは?
467:デフォルトの名無しさん
18/11/21 22:55:48.65 M0TZNmLm.net
>>466
有料ですがnkfのActivePerl用をnamazuというところから購入しましたが、
nkfで変換後、utf8でマッチングが不可能で調査中です。
468:デフォルトの名無しさん
18/11/21 23:00:44.11 M0TZNmLm.net
ハッシュを要素に持つハッシュへのアクセスについて
ご教示いただけますでしょうか。
下記のコードで、読込は正常に完了しますが、出力が不可能です。
$$を使用したり、試しましたがギブアップです。
#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");
469:デフォルトの名無しさん
18/11/22 00:04:25.39 V9xGGA7p.net
wrote_numが何か分からんけど
my %rec; はwhile内にしたらどうですか
あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では
470:デフォルトの名無しさん
18/11/22 10:12:03.32 iCX1SQ90.net
>>469
すみません、レス用に書き換えた元が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
読込完了
出力完了
471:デフォルトの名無しさん
18/11/22 10:30:19.76 Enb78Zev.net
これでいけると思いましたが、玉砕でしたw
foreach my $row (@$table){
while (my ($id, $count, $name) = each(%row)){
print encode('cp932', "$id\t$count\t$name\n");
}
472:デフォルトの名無しさん
18/11/22 10:54:51.08 iCX1SQ90.net
これでいけました!
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
出力完了
473:デフォルトの名無しさん
18/11/22 11:07:56.03 Enb78Zev.net
これで全てのハッシュ要素を出力できますが、
カラム順が不確定になってしまいますね。
ハッシュなので仕方ないことですかね。
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
出力完了
474:デフォルトの名無しさん
18/11/22 12:53:27.47 +z2Jd1go.net
>>473
キーだけ別の配列に取っといてそれ使えば?
475:デフォルトの名無しさん
18/11/25 19:58:05.78 Ngr2zrFy.net
>>474
できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。
476:デフォルトの名無しさん
18/11/25 21:54:59.45 CqrOufwt.net
両方使えば良いのでは たまにやるよ
477:デフォルトの名無しさん
18/11/26 04:07:41.06 LFi/GsCA.net
>>473
foreach $col (sort keys %{$table{$row}}) {
を
foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
478:デフォルトの名無しさん
19/06/24 04:43:33.88 4+LiJo6+.net
自分が昔質問したことにたいして今なら回答できる
<> は <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;
479:デフォルトの名無しさん
19/08/29 20:58:11.72 72vdfcsY.net
タグを除去したいのですが、<>も文に入っているため
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
480:デフォルトの名無しさん
19/08/30 12:09:22.02 VkI78Ia/.net
除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは?
てか、それエラーにならないの?
481:デフォルトの名無しさん
19/08/30 13:51:46.18 XCxRWcZV.net
5chの書き込みのほう、つけ忘れてました
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です
perl -pe 's/<.*?>//g'は動くんですけど
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね
482:デフォルトの名無しさん
19/08/30 13:52:36.95 XCxRWcZV.net
またやっちゃった
perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g'
483:デフォルトの名無しさん
19/08/30 17:21:58.25 8Dc5lx9D.net
こうか?
perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g'
perlというよりシェルのシングルクォートの問題
484:デフォルトの名無しさん
19/08/30 17:42:16.91 fIMZQtfT.net
そこまでするくらいなら HTML::Parser を使う方がいいと思うよ。
485:デフォルトの名無しさん
19/08/30 17:56:41.24 XCxRWcZV.net
>483
できました!、ありがとうございます。
'を'""'で括るのですね
なんで\でエスケープにならないんでしょうね
486:デフォルトの名無しさん
19/08/30 18:04:26.61 XCxRWcZV.net
パーサーも一度使ってみたんですが
<p>hoge</p><p>hoge</p>
pタグが一行に2つあると誤作動したりするんですよね
487:デフォルトの名無しさん
19/08/30 23:22:18.80 fIMZQtfT.net
その誤作動がパーサーのせいかどうかは判らないが、少なくとも
HTML::Parser でそんなことは起こらないから安心してほしい。
たとえばテキスト部分だけを出力したいならこんな感じでできる。
my $parser = HTML::Parser->new(
text_h => [sub { print( $_[0]) },'text'],
);
$parser->parse_file( \*STDIN);
488:デフォルトの名無しさん
19/08/31 00:18:32.04 mx6W2BK8.net
>487
参考になります。
パーサーもいろいろ種類あるみたいですね。
自分の使ってたのはhtml-xml-utilsというやつでした。
489:デフォルトの名無しさん
21/04/21 00:35:38.31 J2c8I4ei.net
@aに0を100ケ追加するには、pushをforで100回回す以外の方法ありますか
490:デフォルトの名無しさん
21/04/21 03:07:59.27 aE0oGLsa.net
push(@a, (0) x 100);
491:デフォルトの名無しさん
21/04/27 18:16:47.03 OX0aAdkQ.net
>>490
ありがとうございました
俺が遅くなりまして申し訳ありません
492:デフォルトの名無しさん
21/11/19 22:27:21.73 v67hT9Zk.net
二つ以上の空白文字列を
一つの空白に変えたいのですが
うまくいきません。
if($line=~/\s\s+/){
$line=~s/\s\s+/\s/g
print("$line\n")
}
493:デフォルトの名無しさん
21/11/20 02:07:02.21 h6kzSIM/.net
$line=~s/¥s¥s+/ /g
では?
494:デフォルトの名無しさん
21/11/20 20:14:01.04 xbsxU5SW.net
s/\s\s+/ /g;
でうまくいったよ。
そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。
これは俺も気を付けよう。
495:デフォルトの名無しさん
21/11/20 20:36:42.09 xbsxU5SW.net
置換といえばこのまえ、JSONで取得したUnicodeを表示したくて、
\u3042 → \N{U+3042}
に置換しようとしたけど、できなかった。
\N{U+ }←ここにはリテラルしか書けないのかな。
496:デフォルトの名無しさん
21/12/14 19:15:14.22 LP8Fmqr9.net
if文で真偽値を判定するのってどうやるの?
hoge() or die("Error\n");
ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて
my $a = hoge();
if( ! $a ){ print("Error\n"); exit $!; }
みたいにしたんだけど、if文の書き方ってこんなんで良いの?
497:デフォルトの名無しさん
21/12/25 19:09:39.02 pJ3Bii8w.net
>>496
0を返しても、0といb、文字(アスキーコード0x30)として扱われたりするから、俺は
if(scalar($a)) {
とか
if($a eq 0) {
とかするよ。
498:デフォルトの名無しさん
21/12/25 20:31:09.16 62MjaTIU.net
>>496
良い。
! で条件反転させるんだったら unless 使っても良いと思うけどね。
unless ($a) { ... } みたいに。
499:デフォルトの名無しさん
21/12/30 05:41:55.25 grPlj9k3.net
良くないんだってば。
Perlをそういう流儀でやってるといつか痛い目にあうよ。
500:494ではない
21/12/30 08:07:22.12 j5bdR14I.net
>>497
マジか。
my $a = hoge();
において、左辺が 0、右辺が 0x30 になるのは、言語としてぶっ壊れているんじゃね?
501:デフォルトの名無しさん
21/12/30 17:49:56.83 QArx8wCq.net
そういう言語なの
0 but true
なんていう値もあるし
502:デフォルトの名無しさん
22/01/10 19:33:13.97 2hS04FMw.net
do what perl mean
503:デフォルトの名無しさん
22/01/11 00:17:50.61 Xf79Fgui.net
bool値ほしい
504:デフォルトの名無しさん
22/03/27 23:43:39.11 TRkpHzjA.net
>>499
じゃあどうすればいいの?
505:デフォルトの名無しさん
22/04/28 20:33:01.74 KupWcmJ5.net
元の
hoge() or die("Error\n");
が問題なく動いてるなら
hoge() or print("Error\n"), die $!;
506:デフォルトの名無しさん
22/06/11 13:31:52.57 XcUjU1KU.net
hoge()が0を返しうるかどうかもわからんと思うのだが
>元の
>hoge() or die("Error\n");
>が問題なく動いてるなら
という前提の下で >>497 の配慮に意味があるの? >>498 で十分
hoge() or が動くという前提を無視するとして
もしもhoge()が0を含む数値か失敗を返すなら(空文字を含む文字列か失敗でもいい)
失敗にundefを返してdefinedで受けるのがフツー
507:デフォルトの名無しさん
23/12/15 06:59:42.19 aRdlBUAD.net
$_ ← これ、なんて読む?
perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
508:デフォルトの名無しさん
23/12/19 00:32:16.33 LgO8Ui43.net
ドル・アンダーバーじゃないかな。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
509:505
23/12/21 12:15:47.33 nsa/DjJa.net
おつあり
そういやそんなの(トップバー)あったねえ なるほど
510:デフォルトの名無しさん
24/02/09 17:07:48.28 LEmbefGZ.net
V5.38.2
32ビット
URLリンク(github.com)
64ビット
URLリンク(github.com)
511:デフォルトの名無しさん
24/03/03 23:39:10.39 1cRqRnnX.net
なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが)
perlと関係なかったらすみません…
512:デフォルトの名無しさん
24/03/16 03:41:28.53 I49Gallj.net
StrawberryPerlで
$str='あ';
if ($str =~ /^[あいう]$/) {print("match\n");}
を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
513:デフォルトの名無しさん
24/03/16 08:42:58.43 E8XsMGej.net
print length $str; を入れてみたらわかる
514:デフォルトの名無しさん
24/03/16 09:03:33.98 E8XsMGej.net
もしかして: \p{sc=Hiragana}
515:デフォルトの名無しさん
24/03/16 09:16:48.08 1WMRgWrv.net
ネタにマジレス
516:デフォルトの名無しさん
24/03/16 11:57:07.41 Xoe9pkvE.net
>>513
レスどうもです
Shift-JISの環境で正しく2とカウントされてます
前記はあくまで例ですので全角文字なら他の文字でもこうなるみたいで
ひらがなにマッチさせたいわけではないんです
517:デフォルトの名無しさん
24/03/16 15:20:26.94 e8kHlvhU.net
少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね?
518:デフォルトの名無しさん
24/03/16 15:27:36.56 HqlfXJdH.net
推奨されてないけど
use encoding 'sjis'
ならsjisでコード書けたと思う
jperlナツカシス
519:デフォルトの名無しさん
24/03/24 16:38:15.53 gHSiAGjm.net
Windows では Filter::Encoding いれて使ってた
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
520:デフォルトの名無しさん
24/07/23 22:33:05.15 Ott+kcdk.net
URLリンク(github.com)
Strawberry Perl 5.39.10.1
521:デフォルトの名無しさん
24/07/23 22:33:17.30 Ott+kcdk.net
URLリンク(github.com)
5.40.0.1-RC1
522:デフォルトの名無しさん
24/12/28 19:26:01.73 y4rnnCNdg
闇バイ├数十件やってしこたま儲けてようやく捕まったやつがいるか゛要するにクソ腐敗ポリ公はお手上げて゛マスコ゛ミに頼るしかないのが現実
何しろ毎日グルグル遊覧ヘリ飛は゛して莫大な血税で石油燃やしまくって望遠カメラで女風呂のぞき見しながら凄まし゛い爆音を閑静な住宅地に
まき散らして知的産業壊滅させて住民イライラ犯罪惹起してこれて゛もかと税金泥棒し続ける害惡でしかないテロ組織なんだから当然だわな
人権ガン無視て゛海に囲まれた曰本でわざわざ陸域飛行だらけ.力による‐方的な現状変更によって朝ぱらからクソ爆音航空機に荒川遡上させて
威カ業務妨害に労働者の睡眠妨害して生産性壊滅.子の学習環境破壞して無能だらけ国際競争力も壊滅、システム障害に情報漏洩まみれの
ポンコツ後進国に陥れて國民貧困化させて気候変動、災害連発させて白々しく金配るから票よこせだの史上最惡の強盗殺人集団自民公明が
諸惡の根源、日本に原爆落とした世界最惡のならず者国家やハ゛力チョンのように日本も暴動で政府機関が国民に占拠されるまでまもなくだな
民主主義と暴力は切っても切れない関係なのは歴史的にも明らかだからな
(ref.) ttps://www.call4.jp/info.phΡ?typе=iTems&id=I0000062
ТURLリンク(haneda-)рroject.jimdofree.Com/ , ttps://flight-routе.com/
ttps://n-souonhigaisosyoudan.amebaownd.сom/
523:デフォルトの名無しさん
25/04/07 15:52:26.28 ahUtunTX.net
perlを使った応募フォームで同一人物からの応募を省きたいのですが、IPアドレス以外で応募者を識別する方法はありますか?
個人サイトの小さな応募フォームなので完璧でなくても大丈夫です
お知恵を貸していただけると助かります
524:デフォルトの名無しさん
25/04/07 17:32:14.55 aZeLbslJ.net
cookie はどうよ?
525:デフォルトの名無しさん
25/04/07 19:10:26.23 LICdw+AC.net
むしろIPでは個人識別無理
526:デフォルトの名無しさん
25/04/09 23:14:04.55 X4PDIxY1.net
>>524
ありがとうございます、調べてみますm(_ _)m
>>525
変な書き方をしてしまいました
今はIPアドレスで省いてるのですが、おっしゃる通り識別できないので他の方法を探してました