This is fairly straightforward when broken into multiple (two) steps.
First extract the text with coordinates, the stuff inside CARTESIAN_POINT( ... )
my ($coord_text) = $string =~ /= \s+ [A-Z_]+ \s+ \( \s* (.+) \s* \)/x;
where /x allows for those spaces inside, for readability. The .+ is greedy and gets everything up to the very last ), including the nested (...).
Then get coordinates out of that
my @coords = $coord_text =~ /([A-Z]+|[0-9-.]+)/g;
Here we allow either a word (like that NONE), or a number (in shown format†).
Altogether, with the intermediate step "hidden" inside a do lexical scope
use warnings;
use strict;
use feature 'say';
my $string = q(#23 = CARTESIAN_POINT ( 'NONE', ( -1.822612853216911200, 55.22284222837789300, 8.566382866014988600 ) ) ; );
my @coords = do {
my ($coord_text) = $string =~ /=\s+[A-Z_]+\s+\(\s*(.+)\s*\)/;
$coord_text =~ /([A-Z]+|[0-9-.]+)/g;
};
say for @coords;
This is easily tweaked for variations in requirements/outcomes, slight or major
To capture quotes around NONE as well (shown in OP), add quotes to the character class for the word, [A-Z\x22\x27]. I use hex in case this is a "one-liner" in a bash script or some such, since context isn't specified. In a normal script you can use " and '
To get numbers in a string instead of a list, as mentioned in the question, use
$coord_text =~ /([A-Z]+|\([^)]+\))/g;
instead of the second statement in the do block above
I assume that you have a list containing either words (like NONE) or straight lists of coordinates (numbers), without any further nesting or similar syntactic complexities.
Note If the input can be a multiline string then add /s modifier to the regex. With it the . matches a newline as well and it all works the same as above (it does in my tests). This should only be needed in the first regex, making it
my ($coord_text) = $string =~ /=\s+[A-Z_]+\s+\(\s*(.+)\s*\)/s;
but it won't hurt in the other one either.
† The used character class [0-9-.] also allows garbage (like -.-2 etc). If you need to confirm that you indeed have a number in the given format please add checks for that. The best way to test for a number is looks_like_number from Scalar::Util.