X



Perl初心者スレ(マジレス回答)
0475デフォルトの名無しさん垢版2018/11/26(月) 04:07:41.06ID:LFi/GsCA
>>471
foreach $col (sort keys %{$table{$row}}) {

foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
0476デフォルトの名無しさん垢版2019/06/24(月) 04:43:33.88ID:4+LiJo6+
自分が昔質問したことにたいして今なら回答できる
<> は <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;
0477デフォルトの名無しさん垢版2019/08/29(木) 20:58:11.72ID:72vdfcsY
タグを除去したいのですが、<>も文に入っているため
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
0478デフォルトの名無しさん垢版2019/08/30(金) 12:09:22.02ID:VkI78Ia/
除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは?
てか、それエラーにならないの?
0479デフォルトの名無しさん垢版2019/08/30(金) 13:51:46.18ID:XCxRWcZV
5chの書き込みのほう、つけ忘れてました
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です

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

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

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

自分の使ってたのはhtml-xml-utilsというやつでした。
0490デフォルトの名無しさん垢版2021/11/19(金) 22:27:21.73ID:v67hT9Zk
二つ以上の空白文字列を
一つの空白に変えたいのですが
うまくいきません。

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

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

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

! で条件反転させるんだったら unless 使っても良いと思うけどね。
unless ($a) { ... } みたいに。
0498494ではない垢版2021/12/30(木) 08:07:22.12ID:j5bdR14I
>>495
マジか。
my $a = hoge();
において、左辺が 0、右辺が 0x30 になるのは、言語としてぶっ壊れているんじゃね?
0502デフォルトの名無しさん垢版2022/03/27(日) 23:43:39.11ID:TRkpHzjA
>>497
じゃあどうすればいいの?
0504デフォルトの名無しさん垢版2022/06/11(土) 13:31:52.57ID:XcUjU1KU
hoge()が0を返しうるかどうかもわからんと思うのだが

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

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

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

perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
0506デフォルトの名無しさん垢版2023/12/19(火) 00:32:16.33ID:LgO8Ui43
ドル・アンダーバーじゃないかな。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
0507505垢版2023/12/21(木) 12:15:47.33ID:nsa/DjJa
おつあり
そういやそんなの(トップバー)あったねえ なるほど
0509デフォルトの名無しさん垢版2024/03/03(日) 23:39:10.39ID:1cRqRnnX
なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが)
perlと関係なかったらすみません…
0510デフォルトの名無しさん垢版2024/03/16(土) 03:41:28.53ID:I49Gallj
StrawberryPerlで

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

を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
0514デフォルトの名無しさん垢版2024/03/16(土) 11:57:07.41ID:Xoe9pkvE
>>511
レスどうもです
Shift-JISの環境で正しく2とカウントされてます
前記はあくまで例ですので全角文字なら他の文字でもこうなるみたいで
ひらがなにマッチさせたいわけではないんです
0515デフォルトの名無しさん垢版2024/03/16(土) 15:20:26.94ID:e8kHlvhU
少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね?
0517デフォルトの名無しさん垢版2024/03/24(日) 16:38:15.53ID:gHSiAGjm
Windows では Filter::Encoding いれて使ってた
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
レスを投稿する


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