Yes, only arrays are indexable.  And yes, regextract is fairly new...

> Hi Dan,
> 
> Thanks for the tip.  \B does seem to work in the way that I expected the
> null pattern to (although I understand the subtle difference you point
> out.  Fortunately, our usernames shouldn't have any word boundaries in
> them.)
> 
> The other issue that I am running into is that it seems that slists
> cannot be indexed - calling getindices on an slist does not seem to
> return another slist.  So only arrays have indices (?)
> 
> I attempted:
> 
> vars:
>          "chars" slist => splitstring("word", "\B", 4);
> 
> reports:
>     cfengine_3::
>         "The first letter in word is $(chars[0])"
> 
> But that doesn't seem to work.  So, per your suggestion, I tried
> regextract - according to the online docs, regextract will create an
> array, which I may be able to use in this way.  Problem is...
> 
> > # cf-agent -f ./understanding_slist.cf -I -K
> > cf3:./understanding_slist.cf:24,83: Unknown built-in function
> > regextract(), near token ')'
> Is regextract() only available after 3.0.3?
> 
> Jim
> 
> On 2/26/10 2:13 PM, daniel.kl...@cfengine.com wrote:
> > Jim-
> >
> > You're right, splitstring does not split on every character (and maybe it
> > should if you specify a null pattern).  And you missed on "." (because that
> > makes every character a separator, and then there are no characters to
> > separate) and on "[.]" (because a '.' in a [character class] is just a dot,
> > and there are no dots in your string.  But here's something that will get
> > you closer:
> >
> > vars:
> >     "chars" slist => splitstring("word", "\B", 4);
> >
> > (look in the Perl manual for the reason :-)  This works fine if you only ha
> ve
> > alphanumeric characters in your string (a-zA-Z0-9_).  However, it will NOT 
> work
> > right if you try to split "foo:baz:bar".
> >
> > Look at regextract, too - that may be another way of accomplishing what you
> > want - in case you need to address more complicated strings to split.
> >
> > -Dan
> >
> > P.S.  \b means the place between a \w and a \W character.  \B means the pla
> ce
> > between two \w or two \W characters.
> >
> >   
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to