ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
7.6 The split and join FunctionsRegular expressions can be used to break a string into fields. The 7.6.1 The split FunctionThe $line = "merlyn::118:10:Randal:/home/merlyn:/usr/bin/perl"; @fields = split(/:/,$line); # split $line, using : as delimiter # now @fields is ("merlyn","","118","10","Randal", # "/home/merlyn","/usr/bin/perl") Note how the empty second field became an empty string. If you don't want this, match all of the colons in one fell swoop: @fields = split(/:+/, $line); This matches one or more adjacent colons together, so there is no empty second field. One common string to split is the $_ = "some string"; @words = split(/ /); # same as @words = split(/ /, $_); For this split, consecutive spaces in the string to be split will cause null fields (empty strings) in the result. A better pattern would be
@words = split; # same as @words = split(/\s+/, $_); Empty trailing fields do not normally become part of the list. This is not generally a concern. A solution like this, $line = "merlyn::118:10:Randal:/home/merlyn:"; ($name,$password,$uid,$gid,$gcos,$home,$shell) = split(/:/,$line); # split $line, using : as delimiter simply gives 7.6.2 The join FunctionThe $bigstring = join($glue,@list); For example, to rebuild the password line, try something like: $outline = join(":", @fields); Note that the glue string is not a regular expression - just an ordinary string of zero or more characters. If you need to get glue ahead of every item instead of just between items, a simple cheat suffices: $result = join ("+", "", @fields); Here, the extra $output = join ("\n", @data, ""); |