
下記のperlでgrepの戻り値がおかしい。
use Encode;
use utf8;
use open IO => ":encoding(utf8)";
binmode STDOUT,':encoding(cp932)';
binmode STDERR,':encoding(cp932)';
use LWP::Simple;
$content=get("http://uwakich.com/archives/49502116.html");
@list1=grep /\n/,$content;
@list2=grep{$list1[$_] =~ /html/} 0 .. $#list1;
print @list2;
grepの値は、添字を返す。結果は0を返す。実際は、最低でも2つは有る
はずだが。一つも無いと言うのは、どうしてだろうか。
これは、例えば一旦$contentをファイルに落としてからやると、今度は
きちんとgrepは添字を返して来る。
何が違うのだろうか。済みません。誤りを指摘願います。
No.1ベストアンサー
- 回答日時:
ちゃんと「添字 0 」という「正しい結果」が返ってきてますよ。
@list1=grep /\n/,$content;
は、「要素が $content だけのリスト」が引数となります。つまり
my @contents
$contents[0] = $content ;
@list1=grep /\n/, @contents;
と同等です。
grepは /\n/ が真となる要素のリストをかえします。したがって
@;ist1 = @contents ;
すなわち
$;ist1[0] = $content ;
と同じ状態になります。
その該当する添字の返えせば
@list2 = ( 0 )
になるのが正しい動作です。
> 例えば一旦$contentをファイルに落としてからやると
こちらは、
@lines = <FP> ;
みたいな感じで、 ファイルの1行 = リストの1要素 として読み込んでいるのではないですか?
「行分割されたリスト」
と、
「全行を連結した文字列」
とで、結果が違ってもなんの不思議もありません。
@list1=grep /\n/,$content;
はsplitでしょうね。
http://perldoc.jp/func/grep
http://perldoc.jp/func/split
有難う御座います。
てっきり、grepをsplitの積りで使っていました。
解決です。vim,perl,enc,fencとかで、ごちゃごちゃして
整理が出来ていませんでした。
有難う御座います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
Strawberry Perl for Windows ...
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
【エラー】Unrecognized character
-
does not map to shiftjis は解...
-
perlでuse utf8でsjisのファイ...
-
Data::Dumper;でダンプ後表示し...
-
消費税の計算で 税込価格から...
-
Perl UTF8で出力
-
ファイル出力をUTF8Nではなくて...
-
Perl:Unicodeプロパティ作れない
-
文字を一文字ずつ区切りたい
-
perlのmysqlで文字化けをする、...
-
sedの動作
-
perlのLWP::Simpleでgrepの値が...
-
Perl utf8上でshiftjisをデコード
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
おすすめ情報
先程は失礼しました。実は、ファイルに落としてからやったのですが。
矢張り出来ませんでした。ファイルに落としてからやると全ての
htmlのソースを出力してから最後に0を出力します。
意味が分かりません。この時のふるまいをすみませんが。説明願います。
よろしくお願いします。
下記のperlは正常に出力をするのですが。
@in=( "htm", "html", "anta");
@list=grep{$in[$_] =~ /html/} 0 .. $#in;
print join("\t",@list);
このブ場合は正しく1を表示します。
何処が違うのだろうか。