Perl では、次の式は何をしますか:
$datarow =~ s/,null/,/g;
s/pattern/replacement/
pattern
の最初の出現をに置き換えるように perl に指示するコマンドですreplacement
。
s/pattern/replacement/g
コマンドは、最初の出現箇所だけでなく、すべての出現箇所を置換します。
あなたのコードが行うことは、すべての出現を見つけて,null
それらを置き換えることです(各コンマ,
の後に削除します)。null
これは単純な置換コマンドです。
$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 に含まれている正規表現のチュートリアルを参照する時間を取る必要があります。
Perl では、s/
afterは置換を行っていることを意味し ( afterは一致評価であるのとは=~
対照的に)、 theは置換したい文字列であり、これは middle の後にあり、はそれがグローバルな置換であることを意味します。最初の出現を置き換えるだけです...m/
=~
,null
,
/
/g