On Apr 29, 2006, at 1:08 AM, Mark Jordan wrote:
Edward Summers wrote:
Deleting subfields is a bit tricky since subfields may repeat, and
sometimes people just want to delete one of them. An unfortunate
state of affairs perhaps.
Yeah, I can see what you're saying, but doesn't that also apply to
repeatable fields?
Well yeah it does, and you're right there is a
MARC::Record::delete_field isn't there. Would having something
similar to
that in MARC::Field be useful to you?
If a particular subfield that is one of a repeated set needed to be
deleted, it could be identified by a regex or by its order in an
array (following object syntax probably not correct):
@subfields = $subject->subfields();
foreach $notwanted (@subfields) {
if ($notwanted =~ /badsubject/) {
$notwanted->delete_subfield();
}
}
That could work if subfields were objects, but they're just strings.
It could simply delete all of them unless a second parameter is
passed in, which would basically act like a filter:
$field->delete_subfield('a', qr/badsubject/);
An alternative of course is to play fast and loose with the Object
model and twiddle with $field->_subfields ... this is an array that
looks like:
['a', 'foo', 'b', 'bar']
Of course this opens you up to future failure if the internals of
MARC::Field change at some point in the future. Which may not be all
that likely :-)
//Ed