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

Reply via email to