Perl コーディング初心者質問コーナー Part27

このエントリーをはてなブックマークに追加
415nobodyさん
文字列置換なんだが、

my $a = 'abcdefg';
$a =~ s/abc/ABC/;

こうすれば $a は ABCedfg となるが、こうじゃなくて、
元の文字列は変更しないでそのままにして、
置換結果だけを新しい変数に入れる場合はどうしたらよい?たとえば

my $a = 'abcdefg';
my $b = $a =~ s/abc/ABC/;

としても、$b には 1 としか入らないので困った。もっとも

my $b = $a;
$b =~ s/abc/ABC/;

とすればいいだけの話だが、これを1行で書きたい。
416nobodyさん:03/08/25 07:37 ID:???
my $b = $a; $b =~ s/abc/ABC/;
417nobodyさん:03/08/25 09:15 ID:???
(my $b = $a) =~ s/.../.../;

まぁ、諦めるしかないってこった。
418nobodyさん:03/08/25 11:19 ID:???
419nobodyさん:03/08/25 11:21 ID:???
なぜ1行
にこだわる
420nobodyさん:03/08/25 11:32 ID:???
>>415-419
何年か前にも見た光景だ。
デジャヴか?
421nobodyさん:03/08/25 11:47 ID:???
up/aec9215fb4f8.cgi
http://up.isp.2ch.net/upload/c=03okari/index.cgi

KENTWEBさんの物をベースにBBSを作ってるんですが、
タグ使用できるように、数文付け足した直後書き込みが出来なくなりました。
自分でも、本と見比べるなどして、問題点を探したんですが、分かりませんでした。
どこが悪いんでしょうか?
422nobodyさん:03/08/25 12:40 ID:???
>>421
スクリプトの改造ネタはこちらでどうぞ

【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
423421:03/08/25 12:52 ID:???
>>422
すれ違いスマソ。
424nobodyさん:03/08/25 13:30 ID:???
if処理で
ある 配列 @a = (1000個くらい)
を 最初から読み込んでいって
配列@bにその値が含まれている場合
ある処理をしたいと思ったんですが

@a = (2,5,6,8,9,4,2,6,5,4,6,3,5,2,4,5);
@b = (1,2,3,4,5,6,7,8,9,10,11,12,13,14);

foreach $a (@a){
 foreach $b (@b){
  if($a == $b){ ここに処理; last;}
 }
}

というのを考えたんですけど
二つ配列が共に1000個近くあると
Maxで1000*1000近くループしそうなのですが

もっとスマートな方法ってないでしょうか?
または 変数がある配列に含まれているか
真偽を返す関数などはありませんでしょうか?
425nobodyさん:03/08/25 14:29 ID:???
use strict; ってチェックの時だけやって
普段は外すっていうのは駄目ですか?

単に宣言なしの変数チェックと言う認識しか無いのですが
常にuseしておいた方が良いのならそうしようかと…。
426nobodyさん:03/08/25 15:00 ID:???
>>425
Larry Wallは常にuseしろと仰ってますね。

俺も常にuseしてる。というか、付けると便利なものをなんでわざわざ外そうと
思うのか分からない。
427nobodyさん:03/08/25 15:02 ID:???
>>424
メモリは食うが
my %b;
@b{@b} = (1) x @b;
for my $a (@a) {
  $b{$a} or next;
  ...
}

>>425
use strict; したままだと困る事があるなら外せばいい。
俺は部分的に no strict ...; する方を選ぶが。
428349:03/08/25 15:07 ID:???
どうも。5.6.1にXML::ParseおよびXML::SAX入れることができますた。
邪魔してたのはcc on SunOSですた。
429nobodyさん:03/08/25 15:18 ID:???
>>426
リリース後はいらないと思うが。
430424:03/08/25 15:27 ID:???
>>427
漏れが書いたのと
どっちのほうが効率的でしょうか?