-3

Perl では、次の式は何をしますか:

$datarow =~ s/,null/,/g;
4

3 に答える 3

6

s/pattern/replacement/patternの最初の出現をに置き換えるように perl に指示するコマンドですreplacement

s/pattern/replacement/gコマンドは、最初の出現箇所だけでなく、すべての出現箇所を置換します。

あなたのコードが行うことは、すべての出現を見つけて,nullそれらを置き換えることです(各コンマ,の後に削除します)。null

于 2013-06-28T17:57:39.053 に答える
1

これは単純な置換コマンドです。

$string =~ s/find/replace/;

上記では、変数$stringが変更されています。文字列の最初のインスタンスはfindに置き換えられreplaceます。1

g末尾にa を追加することはglobalfindを意味し、 のすべてのインスタンスをに置き換えますreplace

あなたのコマンドでは、変数$datarowが変更されています。のすべてのインスタンスは,null、コンマだけに置き換えられています。次のスクリプトを試してください。

#! /usr/bin/env perl

use strict;
use warnings;
use feature qw(say);

my $datarow = "this,that,null,this,that,null,this,this,that";
$datarow =~ s/,null/,/g;
say "Datarow is equal to `$datarow'";

このプログラムを試してみてください。次のように出力されます。

Datarow is equal to `this,that,,this,that,,this,this,that'

1ここでは簡略化しています。はfind単なる文字と数字の文字列ではなく、正規表現です。正規表現は強力な概念ですが、ほとんどの開発者が完全に理解していない難解な概念です。ただし、ここでは正規表現の魔法の呪文は使用されていないため、これは単なるリテラル,null文字列の説明です。

それでも、Perl に含まれている正規表現のチュートリアルを参照する時間を取る必要があります。

于 2013-06-28T18:37:37.103 に答える
0

Perl では、s/afterは置換を行っていることを意味し ( afterは一致評価であるのとは=~対照的に)、 theは置換したい文字列であり、これは middle の後にあり、はそれがグローバルな置換であることを意味します。最初の出現を置き換えるだけです...m/=~,null,//g

于 2013-06-28T18:00:13.970 に答える